您的位置:首页 > 编程语言 > Java开发

使用maven和eclipse自动生成的web工程中jsp页面c:out不生效的解决

2014-06-21 23:03 831 查看
现在回想起这个问题,只能说很多细节没关注过,不知道是什么意思,有什么作用。也许,这次遇到这个错误,也是一件好事情吧。

废话不多说了,上主题。

前戏

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" %>


马上检查自动生成的web.xml,居然用的servlet 2.3。原来,我更改Dynamic Web Module为2.5后,web.xml并没有更改。
后面干脆修改为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版本的方法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐