JSTL <c:out value="${EL}">不能正確輸出的問(wèn)題
由于Jsp2.0向后兼容的特性, 當(dāng)遇到使用Jsp 1.2(Servlet v2.3)的網(wǎng)站時(shí)會(huì)默認(rèn)的禁用JSP2.0 EL,所以導(dǎo)致c:out不能正確輸出。
(這里注意Jsp 1.2禁用JSP2.0的EL,而是去使用JSTL 1.0 taglib去解析EL。所以使用JSP 1.2+JSTL 1.0不會(huì)出問(wèn)題,而使用了JSP 1.2+JSTL 1.1就會(huì)導(dǎo)致c:out不能正確輸出)
啟用EL或修改webv.xml為jsp2.0可以解決問(wèn)題。
啟用EL:在jsp頁(yè)面中加入
<%@ page isELIgnored="false"%>
page指令的isELIgnored屬性是控制EL的使用權(quán)的,它的兩個(gè)值,true和false
如果 isELIgnored='true'表示禁用EL,isELIgnored='false' 表示可以使用EL, 默認(rèn)是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表達(dá)式
JSP EL表達(dá)式是包含在符號(hào)“${"與"}”之間。例如,${4*8}是一個(gè)EL表達(dá)式。在Java服務(wù)器技術(shù)中,不再保留“${"和"}”符號(hào)作為EL表達(dá)式的專(zhuān)用符號(hào)。執(zhí)行表達(dá)式時(shí),JSP容器可能將大括號(hào)視為循環(huán)的起始括號(hào)而顯示錯(cuò)誤,或得出錯(cuò)誤的輸出結(jié)果。因此,有時(shí)需要使用isElgnored屬性禁用EL表達(dá)式是。
Servlet2.3規(guī)范未定義EL表達(dá)式,因此在JSP1.2中默認(rèn)是禁用EL表達(dá)式,如果在JSP頁(yè)面中出現(xiàn)Servlet2.3EL表達(dá)式,將被忽略。Servlet2.4定義了EL表達(dá)式的模式,而JSP2.0中默認(rèn)啟用JSP EL表達(dá)式。
<% @page isELIgnored = "true|false"%>
其中,page表示頁(yè)面指令,isELIgnored確定是否應(yīng)忽略對(duì)EL表達(dá)式進(jìn)行計(jì)算。
如果isELIgnored設(shè)置為true,當(dāng)EL表達(dá)式在靜態(tài)文本或標(biāo)簽屬性中出現(xiàn)時(shí)將被忽略;如果isELIgonred設(shè)置為false,EL表達(dá)式則由JSP容器進(jìn)行計(jì)算。
本文來(lái)源于:尼克技術(shù)博客 http://www.ineeke.cn/ , 原文地址:http://www.ineeke.cn/archives/233/