【问题标题】:JSP EL expressions not working in tag filesJSP EL 表达式在标记文件中不起作用
【发布时间】:2011-03-10 14:00:18
【问题描述】:

我们正在尝试将 Java Web 应用程序从 Tomcat 5.5 服务器迁移到更现代的 Tomcat 6.0.24 服务器,但 JSP EL 存在一些问题。

服务器无法识别放置在 XML 标记文件中的表达式,服务器只是将它们呈现为文本(就像在下面的示例中一样)。 任何想法为什么?

<object id="${id}"
        classid="java:${code}.class"
        type="application/x-java-applet;version=1.5"
        archive="${archive}" codebase="${codebase}"
        height="${height}" width="${width}" > 
    <param name="code" value="${code}" /> 
    <param name="codebase" value="${codebase}" /> 
    <param name="archive" value="${archive}" /> 
    <param name="type" value="application/x-java-applet;version=1.5"/> 
    <param name="mayscript" value="true" /> 

    <param name="cache_archive" value="wetorrent.jar,weupnp.jar" /> 
        <param name="cache_version" value="0.0.0.17,0.0.0.17" />    
    <strong> 
        <span style="cursor: pointer" onclick="window.open('http://www.java.com/','_blank','toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1');"> 
            This browser does not have a Java Plug-in.<br /> 
            Get the latest Java Plug-in here.</span> 
    </strong> 

</object>

奇怪的是,在包含标签 EL 表达式的 JSP 中完美运行。

我什至尝试在 .tag 文件中设置 isELIgnored="false" 属性,但出现此错误:

标签指令:多次出现不同值的 isELIgnored 是非法的(旧:真,新:假)

旧的(真实的)价值从何而来?我们从未指定过。


其他一些信息:

taglib 总是包含在(在 .jsp 和 .tag 文件中)使用

我们将standard.jarjstl.jar 放在服务器的lib/ 目录中。

web.xml 以以下行开头:

<web-app version="2.4" 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">

【问题讨论】:

  • 这是您的标签文件的完整来源吗?在我看来更像是一个 jsp 片段/包含文件。
  • 这不是标签的来源:它是 Tomcat 在输出中呈现的实际片段。

标签: java jsp tomcat jstl el


【解决方案1】:

你确定你有 JSTL 1.2 jar 吗?你需要有那个版本来识别${foo},而我认为没有&lt;c:out/&gt;

【讨论】:

  • 这不是真的。您需要 el-api JAR 文件,该文件已经在 Tomcat/lib 中。
【解决方案2】:

Tomcat 6.0 是一个 Servlet 2.5 & JSP 2.1 容器。首先,尝试使用以下&lt;web-app&gt; 开始标签:

<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_2_5.xsd"
     version="2.5">

另外,如果您使用 JSTL,请不要将 JAR 安装在 Tomcat 的 lib 目录中,将它们保存在应用程序的 WEB-INF\lib 目录中。顺便说一句,从 JSP 2.0 开始,EL 是 JSP 的一部分,因此其评估不需要 JSTL。

【讨论】:

  • 试过了,但没有任何区别。一开始我不明白什么将 isELIgnored 设置为 true。
  • isELIgnored 除了page 指令外,还可以在tag 指令中指定(如您的原始错误所示)。确保检查您的 JSP 和标记文件。
【解决方案3】:

由于它适用于 JSP 而不是标签,因此您还可以检查 .tld,如果您有可能是原因的 jsp-version 元素:

<?xml version="1.0" encoding="ISO-8859-1" ?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee" version="2.0">
        <tlib-version>2.0</tlib-version>
        <jsp-version>1.2</jsp-version>

只需删除 jsp-version 元素。

【讨论】:

    【解决方案4】:

    这是 Tomcat 中的一个错误。我在这里提交了一个错误报告:https://issues.apache.org/bugzilla/show_bug.cgi?id=52931

    要解决它,只需将属性“jspversion”留空,就像@Ceren 建议的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多