现在回想起这个问题,只能说很多细节没关注过,不知道是什么意思,有什么作用。也许,这次遇到这个错误,也是一件好事情吧。
废话不多说了,上主题。
前戏
eclipse版本:Kepler Release,maven版本:3.0.5,eclipse插件版本:Maven Integration for Eclipse1.4.0。
通过如下模版新建了web项目:
默认的Dynamic Web Module为2.3【坑爹啊】,然后修改Dynamic Web Module为2.5【可能会出现更改不了的情况,请参考本文最后的附】
现象
然后加入spring3.2.9,写controller和index.jsp,controller中返回name,jsp页面用“<c:out value="${name}" />”.
但页面始终显示${name},而不是返回真实的属性。
解决
曾一度怀疑spring3.2.9版本有问题,修改为工作中用的spring3.1.1,同样不行。
后面网上查询“c:out不生效”相关问题,有人说要设置:
<%@ page isELIgnored="false" %>
我不知道是什么意思,报着试一试的态度,改了之后居然页面显示正常了。
原因
激动之余就查了isELIgnored的相关信息:
isELIgnored 属性
isELIgnored 属性控制的是:忽略(true)JSP 2.0 表达式语言(EL),还是进行正常的求值(false)。这是 JSP 2.0 新引入的属性;在只支持 JSP 1.2 及早期版本的服务器中,使用这项属性是不合法的。这个属性的默认值依赖于 Web 应用所使用的 web.xml 的版本。如果 web.xml 指定 servlet 2.3(对应JSP 1.2)或更早版本,默认值为 true(但变更默认值依旧是合法的,JSP 2.0 兼容的服务器中都允许使用这项属性,不管 web.xml 的版本如何)。如果 web.xml 指定 servlet 2.4(对应 JSP 2.0)或之后的版本,那么默认值为false。使用这个属性时,可以采用下面两种形式:
<%@ page isELIgnored="false" %>
<%@ page isELIgnored="true" %>
后面干脆修改为3.0版本:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
之后测试一切OK。
老实说,web.xml的schema和html的DOCTYPE 声明,以前还真没有关注过,从来都是copy过来能用就行。
这次自己动手暴露出问题,算是有不小的收获了。
附:
更改Dynamic Web Module版本的方法