调试了好久,el表达式死活无法在jsp中使用,自己也觉得奇怪。重新做了一个全新的工程问题依然存在。原来是servlet2.5搞的怪。依赖为:
- <dependency>
- <groupId>com.alibaba.external</groupId>
- <artifactId>java.servlet</artifactId>
- <version>2.5</version>
- </dependency>
解决方案:在跳转到的页面(提交页则不用)添加<%@ page isELIgnored="false" %>
在JSP中不能正常显示EL表达式
例如:输入的是${true and true} EL表达 式,在页面上显示的的结果并不是true而是${true and true}
原因是Servlet2.3或更低的版本 中没有定义EL表达式,默认为禁用EL表达式(JSP1.2默认也是禁用EL表达式)。
解决方法:
每个JSP页面中加入禁用EL表达式<%@ page isELIgnored="false" %>
Servlet2.4定义了EL表达式(JSP2.0默认启用EL表达式)。
如果不知道自己使用的版本是那个可以到web.xml中 去查看<web-app>
下面给出2.3版和2.4版<web-app>
2.3版
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
2.4版
<web-app http://java.sun.com/xml/ns/j2ee%22xmlns:xsi=%22http://www.w3.org/2001/XMLSchema-instance">http://java.sun.com/xml/ns/j2ee"xmlns:http://www.w3.org/2001/XMLSchema-instance%22xsi:schemaLocation=%22http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLxsi:schemaLhttp://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
【注意】
(1)取值的时候,一定是<%=request.getParameter("usercode") %>,而不是request.getAttribute("usercode")
(2)取得页面提交过来的内容:username:${param.username }
经过测试,在servlet2.3中只用使用${username}是可以的,但在2.5中不行;在action中添加如下java代码,通过${protocal }可以取得内容,可以用来传递隐含内容,类似于request.setAttribute("protocal")。
- private String protocal = "hello, the protocal.";
- public String getProtocal() {
- return protocal;
- }
- username:<%=request.getParameter("username") %><br>
- username: ${username}<br>
- protocal: ${protocal }
(3)EL表达式 (详解)
本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/678052,如需转载请自行联系原作者