首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSP:不计算EL表达式

JSP:不计算EL表达式
EN

Stack Overflow用户
提问于 2009-04-27 15:14:12
回答 9查看 33.1K关注 0票数 30

我有一个在Tomcat5.5上运行的JSP页面。我有以下代码:

代码语言:javascript
复制
 <c:forEach var="i" begin="1" end="10" step="1">
  <c:out value="${i}" />
  <br />
</c:forEach>

我得到的输出是:

代码语言:javascript
复制
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 
${i} 

我搞不懂为什么forEach循环可以工作,但输出却不能工作。任何人所能提供的任何帮助都将是最好的。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-04-27 15:21:05

我知道它在默认情况下应该是打开的,但我经常遇到EL处理没有发生的页面(甚至是更改行为的同一页面)。将以下内容添加到任何此类页面的顶部应可解决此问题:

代码语言:javascript
复制
<%@ page isELIgnored="false" %> 

我将它添加到每个页面,因为它不会造成伤害,而且我仍然不知道偶尔导致页面停止解释EL表达式的根本原因。

票数 66
EN

Stack Overflow用户

发布于 2011-08-12 11:13:24

我只是遇到了同样的问题,一直在试图找出哪里出了问题。

我从头开始开发了很多web应用程序。为什么这个人突然不合作了?

一个不同之处在于这次我使用了maven webapp原型来生成项目结构。它创建了一个web.xml文件,如下所示:

代码语言:javascript
复制
<!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标头中的一个,重新构建并重新部署。没有雪茄。不敢相信这不是问题所在。清理了项目,重新启动了tomcat。不是的。

RHSeeger的回答让我尝试放入<%@ isELIgnored="false“%>。这就解决了问题。但我仍然想知道为什么el一开始就被忽视了。

我认为el被忽略是因为我的web.xml出了问题,所以我仔细检查了它,并与我知道工作正常的另一个was应用的web.xml进行了比较。没有明显的区别。

然后,我从我的JSP中删除了<%@ page isELIgnored="false“%>,并重新部署,假设el不会再次求值,但令我惊讶的是,el的求值结果很好!

然后,我认为这一定是某种缓存问题,我撤消了对web.xml的更改以重新创建该问题。我重新部署了,但即使web.xml不好,el仍然可以正确评估。然后我清理了我的整个项目(我正在使用一个分解的部署),清除分解的目录并重新创建它。然后我重新启动了tomcat。尽管web.xml很差,但el似乎仍得到了正确的评估。

我终于明白了。我只是在JSP中的某个位置添加了一个空间,对其重新打包,然后刷新页面。对啰!现在,el没有得到评估。

所以问题出在web.xml上。如果JSP没有被重新编译,那么它会变得更加复杂,除非它们发生了变化。不确定tomcat是否使用MD5和来决定是否需要重新编译JSP或重新编译什么。另一种可能是我使用的是tiles,我知道它有一个缓存机制,但我不希望它能在tomcat重启后存活下来。

无论如何,除非您在修复web.xml之后修改JSP,否则一切都无法确定EL是否会重新开始工作。希望这不会让别人头疼。如果有人能告诉我,是tomcat而不是重新编译JSP还是tiles缓存JSP的输出,我也很感兴趣。我非常确定这是重新编译,因为在编译时,JSP应该弄清楚如何处理${} el表达式,对吧?Tiles实际上不能缓存被替换到el表达式中的内容,否则会出现各种问题。

票数 39
EN

Stack Overflow用户

发布于 2014-08-19 06:01:15

导致问题的是web.xml中的头文件

下面的maven生成的头阻止了EL的求值。

代码语言:javascript
复制
<!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>

使用下面的头eval的EL。

代码语言:javascript
复制
<?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">
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/793983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档