EL表达式无效的解决方法

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



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

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


我的依赖:

    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

是没有问题的


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


经过检查,确实引入:

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


2.检查<web-app>的约束版本

我的如下:
<!DOCTYPE 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.更改<web-app>的约束版本

如官文档所说,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












  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值