Posted on 2008-05-30 22:32
kooyee 閱讀(2866)
評論(2) 編輯 收藏 所屬分類:
J2EE
JSTL <c:out value="${EL}">不能正確輸出的問題
由于Jsp2.0向后兼容的特性, 當遇到使用Jsp 1.2(Servlet v2.3)的網站時會默認的禁用JSP2.0 EL,所以導致c:out不能正確輸出。
(這里注意Jsp 1.2禁用JSP2.0的EL,而是去使用JSTL 1.0 taglib去解析EL。所以使用JSP 1.2+JSTL 1.0不會出問題,而使用了JSP 1.2+JSTL 1.1就會導致c:out不能正確輸出)
啟用EL或修改webv.xml為jsp2.0可以解決問題。
啟用EL:在jsp頁面中加入
<%@ page isELIgnored="false"%>
page指令的isELIgnored屬性是控制EL的使用權的,它的兩個值,true和false
如果 isELIgnored='true'表示禁用EL,isELIgnored='false' 表示可以使用EL, 默認是false
修改webv.xml為jsp2.0
為了用EL改為
參考:
JSTL 1.0 requires JSP 1.2 (J2EE 1.3 platform). The key difference between JSTL 1.0 and JSTL 1.1 is that the expression language (EL) has moved from the JSTL specification to the JSP specification. The EL is therefore now part of the JSP 2.0 specification, and JSTL 1.1 requires JSP 2.0 (J2EE 1.4 platform).
A web application developed for JSP 1.2 has a servlet 2.3 deployment descriptor (web.xml). JSP 2.0 provides backwards compatibility for JSP 1.2 web applications by disabling by default the EL machinery (i.e. evaluation of EL expressions) when a web application has a servlet 2.3 deployment descriptor. A web application that uses JSTL 1.0 and which is deployed with a servlet 2.3 deployment descriptor therefore runs without any modification in a J2EE 1.4 environment because EL expressions are ignored by JSP 2.0, and JSTL 1.0 keeps evaluating them as was the case with JSP 1.2.
To support backwards compatibility, JSTL 1.1 introduces new URIs that must be specified to use the new capabilities offered in JSTL 1.1. Among these new capabilities is the evaluation of EL expressions being performed by the JSP 2.0 container rather than JSTL itself. The new URIs for JSTL 1.1 are as follows:
- http://java.sun.com/jsp/jstl/core
- http://java.sun.com/jsp/jstl/xml
- http://java.sun.com/jsp/jstl/fmt
- http://java.sun.com/jsp/jstl/sql
The new URIs are similar to the old JSTL 1.0 EL URIs, except that jsp/ has been added in front of jstl, stressing JSTL's dependency on the JSP specification (which now "owns" the EL). It would have been desirable to move forward with the same EL URIs in JSTL 1.1, however this would have only been possible at the cost of losing full backwards compatibility. The JSTL Expert Group felt that maintaining backwards compatibility was more important than preserving the old URIs.
The JSTL 1.0 URIs are deprecated as of JSTL 1.1. If used, they should normally appear in a web application that has a servlet 2.3 deployment descriptor to disable the JSP 2.0 EL machinery. If used with a servlet 2.4 deployment descriptor, the JSP 2.0 EL machinery must be explicitely disabled for the pages where the JSTL 1.0 tag libraries are used. Consult the JSP specification for details.
http://jcp.org/aboutJava/communityprocess/final/jsr052/JSR52-ChangeLog_1.1_Final.html
JSP EL表達式
JSP EL表達式是包含在符號“${"與"}”之間。例如,${4*8}是一個EL表達式。在Java服務器技術中,不再保留“${"和"}”符號作為EL表達式的專用符號。執行表達式時,JSP容器可能將大括號視為循環的起始括號而顯示錯誤,或得出錯誤的輸出結果。因此,有時需要使用isElgnored屬性禁用EL表達式是。
Servlet2.3規范未定義EL表達式,因此在JSP1.2中默認是禁用EL表達式,如果在JSP頁面中出現Servlet2.3EL表達式,將被忽略。Servlet2.4定義了EL表達式的模式,而JSP2.0中默認啟用JSP EL表達式。
<% @page isELIgnored = "true|false"%>
其中,page表示頁面指令,isELIgnored確定是否應忽略對EL表達式進行計算。
如果isELIgnored設置為true,當EL表達式在靜態文本或標簽屬性中出現時將被忽略;如果isELIgonred設置為false,EL表達式則由JSP容器進行計算。
本文來源于:尼克技術博客 http://www.ineeke.cn/ , 原文地址:http://www.ineeke.cn/archives/233/