EL表达式无效的解决方法

       此前开发用的比较多Ajax进行异步交互即数据的显示,最近使用jsp页面进行页面与服务器交互时突然一个很怪的问题,强大的 ${} 失效了,读不出数据,由于使用的是springMVC,所以自己使用spring的test模块进行测试了请求与数据的返回是否有效,经过测试请求后数据可以通过request请求域获得(关于如何使用spring的test模块进行模拟请求进行测试spring的程序,关注自己的另一个博客有详细说明)。那么就可以断定是el表达式有问题。解决方法及思路:



开发环境:servlet是3.1.0、jdk1.7、tomcat 7

0.检查jstl的jar或者说依赖(正确)是否导入


我的依赖:

    
      jstl
      jstl
      1.2
    

是没有问题的


1.检查是否在jsp页面上引入标签


经过检查,确实引入:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


2.检查的约束版本

我的如下:
 web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

经过查阅资料:
这里也拿过来别人查阅官方文档后翻译的:
      如果isELIgnored是true,当EL表达式出现在文本或者标签属性时被忽略。如果是false,则EL表达式通过容器来决定如何解析
,只有属性有返回表达式被设置为true或者表达式是一个延迟表达式时不解析。

isELIgnored的值取决于web应用部署描述符的版本。使用Servlet2.4的描述符的JSP页面默认是解析EL表达式,即表达式有效

。这默认提供了大部分应用想要的情况。而使用Servlet2.3或者更早的描述符的JSP页面默认是忽略EL表达式的,即不解析EL表

达式,这样就提供了向后兼容性。

所以说,两种解决方法:

解决

 
  

01.在每个jsp页面增加声明

 
  

声明:

<%@page isELIgnored="false" %>

经过测试可以使用EL表达式了,问题解决
但是缺陷就是每个页面都要加,累死

02.更改的约束版本

 
  

 
  
如官文档所说,2.3及以下版本isELIgonred是true的,2.4及以上的就默认是false,所以根据需要修改
我改成:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

这样就没有问题了,也可使用EL












你可能感兴趣的:(javaEE)