【问题标题】:EL is not interpreted and appears plain vanilla in generated HTML output [duplicate]EL 没有被解释并且在生成的 HTML 输出中显示为普通的香草[重复]
【发布时间】:2012-09-06 20:56:21
【问题描述】:

我正在使用 Struts1 和 JSP。我可以使用<bean:write> 标记访问表单属性,但不能使用JSTL 来访问。为什么不?我的表格是DynaActionForm。

此语句有效:

<bean:write name="myForm" property="origin"/>

这不起作用,显示 ${myForm.map.origin} 普通香草:

<c:out value="${myForm.map.origin}"/>

这也不起作用,显示 ${myForm.origin} 普通香草:

<c:out value="${myForm.origin}"/>

【问题讨论】:

  • 这是一个遗留系统,我正在做一些改进。我猜他们一直在使用struts1,他们不想将其更改为其他框架,以免破坏系统。
  • 只用“origin”试了一下,还是不行。它打印 ${origin}
  • 我不知道你为什么用 [javascript] 标记这个问题,我已经删除了它,但我只是想确保 Java/JSP 和 JavaScript 绝对没有 互相做期望语言名称中的前 4 个字符。查看有关这两种语言的 Wikipedia 条目以了解严格的区别。

标签: jsp struts jstl el


【解决方案1】:

如果 Servlet/JSP、JSTL 和/或 web.xml 版本不匹配,就会发生这种情况。在 Servlet 2.3/JSP 1.2 期间,EL 是 JSTL 1.0 的一部分。在 Servlet 2.4/JSP 2.0 期间,EL 从 JSTL 转移到 JSP,并且 JSTL 1.1 没有 EL。 web.xml 版本声明指示当前使用的 Servlet/JSP 版本,并且必须由目标容器支持。

因此,如果您在 Servlet 2.4/JSP 2.0 上使用 JSTL 1.0,或者在 Servlet 2.3/JSP 1.2 上使用 JSTL 1.1,那么您将面临这个问题。此外,如果您在 Servlet 2.4/JSP 2.0 上使用 JSTL 1.1,但 web.xml 被声明为符合 Servlet 2.3(或不包含任何版本声明),那么您也将面临这个问题。

our JSTL wiki page 中解释了所有内容。您还可以在其中找到正确 JSTL 版本的下载链接以及正确版本特定 web.xml 声明的示例。

另一个可能的原因是您在 JSP 顶部有一个 &lt;%@page isElIgnored="true"%&gt; 声明或在 web.xml 中声明了 &lt;jsp-config&gt;&lt;el-ignored&gt;true&lt;/el-ignored&gt;&lt;/jsp-config&gt;,但这是一个太明显的原因,不容忽视。

【讨论】:

  • 关于 ${} 被解释为纯文本的第一个假设是正确的。我使用 servletContext.getMajorVersion() 和 servletContext.getMinorVersion 检查了我的 servlet 的版本,我分别得到了 2 和 5。这是否意味着我使用的是 servlet 2.5?如果是这样,那么问题出在哪里?
  • 在这个 Web 应用程序中,还有其他页面他们使用了 jstl 并且它已经工作了。只有我正在使用的这个特定的 jsp 页面有问题。在我的 web.xml 文件中,没有提到任何版本。
  • 我终于解决了。你问我在我的jsp 中是否有这个声明。我没有。我将此语句添加到我的 jsp 中,但将 true 值更改为 false 并且它起作用了。你会碰巧知道为什么会这样吗?
  • 显然它在web.xml中全局配置为&lt;el-ignored&gt;true&lt;/el-ignored&gt;。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多