我有一个运行在Tomcat 5.5上的JSP页面。我有以下代码:
<c:forEach var="i" begin="1" end="10" step="1">
<c:out value="${i}" />
<br />
</c:forEach>
我得到的输出是:${i}
${i}
${i}
${i}
${i}
${i}
${i}
${i}
${i}
${i}
我不知道为什么forEach循环可以工作,但输出结果却没有生效。希望有人能提供帮助。
我知道EL表达式处理默认应该是开启的,但有时我会遇到某些页面(甚至同一页面可能会改变行为)没有进行EL处理的情况。将以下内容添加到任何这样的页面的顶部应该可以解决这个问题:
<%@ page isELIgnored="false" %>
我在每个页面中都添加了它,因为这样做不会有任何损害,并且我仍然不知道是什么根本原因导致页面偶尔停止解释EL表达式。
我刚刚遇到了这个问题,花了很长时间才弄清楚出了什么问题。
我已经从头开始开发过很多Web应用程序,为什么这一个突然不合作了呢?
与以往不同的是,这一次我使用了maven webapp原型来生成项目结构。它创建了一个看起来像这样的web.xml文件:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
一旦我意识到这是我的问题,我确定我有答案。所以我复制了我的2.5 web.xml header之一,重新构建并重新部署。但没有成功。我无法相信那不是问题所在。清理项目,重启tomcat也没有用。问题出在web.xml中的头部。
下面是由maven生成的头部,阻止了EL表达式的求值。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
使用下面的header可以评估EL表达式。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
请确保在web.xml中包含相关的命名空间。尝试替换以下内容:
<web-app>
使用类似于
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
对我来说,这解决了我的问题。您可以从随Tomcat安装的示例应用程序中找到适用于您的Tomcat实例的正确名称空间。
对于那些感兴趣的人,JSP 2.0 的等效 XML 语法如下:
<jsp:directive.page isELIgnored="false"/>
我和Kevin遇到了类似的问题,我使用maven开始webapp,但在jsp中评估表达式时没有成功 - 我不得不删除DOCTYPE头 - 现在一切都很好,而不需要玩isELIgnored位 - maven生成链接到2.3的web.xml,正如Peter所述,默认情况下禁用EL
来自控制器:
@RequestMapping(value = "createcustomer",method = RequestMethod.GET)
public String customer(Model model)
{
Customer cus=new Customer();
cus.setCustomerNumber("Test");
model.addAttribute("customer",cus);
return "createcustomer";
}
在视图中:
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<div class="cl">
<form:form commandName="customer" method="POST">
<p>Name: <c:out value="${customer.CustomerNumber}"></c:out></p>
</form:form>
<div>
输出:
Name: Test
请参阅我的答案Javascript String.replace(/ \ $,str)在jsp文件中运行得很奇怪,以获取可能的原因。
更长的答案:$ {i}是所谓的“表达式语言”中的表达式。有时,表达式语言可能被禁用。请参考上述答案以了解潜在原因和如何启用它的方法。