JSP EL表达式无法在标记文件中使用

时间:2010-07-01 10:57:19

标签: java jsp tomcat jstl el

我们正在尝试将我们的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"属性,但是我收到了这个错误:

  

Tag指令:使用不同的值多次出现isELIgnored非法(old:true,new:false)

旧的(真实)价值来自哪里?我们从未指明过。


其他一些信息:

始终包含taglib(在.jsp和.tag文件中)     &lt;%@ taglib uri =“http://java.sun.com/jsp/jstl/core”prefix =“c”%&gt;

我们将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">

4 个答案:

答案 0 :(得分:4)

Tomcat 6.0是一个Servlet 2.5&amp; JSP 2.1容器。首先,尝试使用以下<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_2_5.xsd"
     version="2.5">

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

答案 1 :(得分:3)

由于它适用于JSP但不适用于标记,因此如果你有jsp-version元素可能是原因,你也可以检查.tld:

<?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元素。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

你确定你有JSTL 1.2罐吗?您需要使用该版本来识别${foo}而不考虑我认为的<c:out/>