我正在使用spring-web-mvc开发我的应用程序......
现在在我的控制器上,它返回如下:
public class InterfacesManageController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("interfacesList", this.interfacesSecurityProcessor.findByAll(0, null, null, null));
return new ModelAndView("common", "model", myModel);
}
现在,我的JSP包含以下代码:
<c:forEach items="${model.interfacesList}" var="prod">
<c:out value="${prod.id}"/> <c:out value="${prod.name}"/><br><br>
</c:forEach>
现在,当我执行这个到Windows平台,我有tomcat 6.0.20,ognl 2.6.11它给了我我想要的确切输出:
117 eth1
118 eth1
119 eth0
但是,当我在unix(cent os)平台上部署war文件时,我有tomcat 5.5,ognl表达式没有执行并给我输出如下:
${prod.id} ${prod.name}
任何人都有解决方案,ognl表达版本和tomcat版本应该有什么问题?
提前致谢...
答案 0 :(得分:33)
但是,当我在Unix(CentOS)平台上部署war文件时,我有Tomcat 5.5,EL表达式没有被执行并给我输出如下:
${prod.id} ${prod.name}
换句话说,EL表达式根本没有得到评估并显示为纯文本?这可能有以下一个或多个原因:
web.xml
未声明为Servlet 2.4或更高版本。<%@page %>
配置了isELIgnored=true
。web.xml
中的<el-ignored>true</el-ignored>
配置了<jsp-config>
。 Tomcat 5.5是Servlet 2.4 / JSP 2.0,因此#1可能被划伤。在我假设部署之前你没有在webapp中做任何改变,所以#3和#4可能会被划伤。现在离开#2。也许您将它声明为Tomcat 6.0的Servlet 2.5,而Tomcat 5.5只能与Servlet 2.4理解。这样一切都会变得一团糟,因为Tomcat会回退到最不兼容的方式。您需要将web.xml
重新声明为 Servlet 2.4 ,以便它可以在Tomcat 5.5和6.0中运行。声明应如下:
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<!-- Here you go. -->
</web-app>
答案 1 :(得分:1)
答案 2 :(得分:1)
感谢BalusC的出色回答。我遇到了他上面诊断出的完全相同的问题,他的解决方案让我在那里得到了一部分。但是,我还必须确保我的应用程序的各种JSP和JSTL依赖项都是兼容的。特别是,我正在引用JSTL 1.2,直到我将该依赖项更改为JSTL 1.1.2之后,此问题才消失(此时我还必须在taglibs.standard:1.1.2上添加显式依赖项)。
以下博客文章提供了有关不同版本之间兼容性的更多信息:http://www.mularien.com/blog/2008/04/24/how-to-reference-and-use-jstl-in-your-web-application/