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

3
我们正试图将我们的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 directive: illegal to have multiple occurrences of isELIgnored with different values (old: true, new: false)。旧值(true)从哪里来?我们从未指定过。一些其他信息:taglib始终使用<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>在.jsp和.tag文件中包含。我们将standard.jar和jstl.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 片段/包含文件。 - Jörn Horstmann
那不是标签的源代码,而是Tomcat在输出中呈现的实际片段。 - abahgat
4个回答

4

Tomcat 6.0是一个Servlet 2.5和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,请勿将JAR文件安装在Tomcat的lib目录中,而是保留在应用程序的WEB-INF\lib目录中。顺便说一句,自JSP 2.0起,EL已成为JSP的一部分,因此不需要JSTL进行评估。

尝试过了,但是没有任何区别。我不明白是什么原因将isELIgnored设置为true的。 - abahgat
“isELIgnored”可以在“tag”指令中指定(与“page”指令一起),这正如您最初的错误所指示的那样。确保检查您的JSP和标签文件。 - kschneid

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元素即可。


2

0

你确定你有 JSTL 1.2 的 jar 包吗?你需要这个版本才能识别 ${foo} 而不需要 <c:out/>


1
这是不正确的。你需要el-api JAR文件,它已经在Tomcat/lib目录中。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接