6

我正在尝试在码头中运行一个在 Tomcat 5.5 中运行良好的应用程序。该应用程序使用 servlet 2.4 和 JSP 2.0。

Jetty/Jasper 抛出此异常:

org.apache.jasper.JasperException: /WEB-INF/tiles/layout/main.jsp(85,55) PWC6340: According to the TLD, rtexprvalue is true, and deferred-value is specified for the attribute items of the tag handler org.apache.taglibs.standard.tag.rt.core.ForTokensTag, but the argument for the setter method is not a java.lang.Object

一件奇怪的事情是,我在任何地方都找不到 TLD。它似乎是通过我不明白的魔法获得的。是否可能获得错误的 TLD?

也很难分辨它从哪里加载 org.apache.taglibs.standard.tag.rt.core.ForTokensTag。Eclipse 在项目的加载路径中没有找到它。

欢迎任何提示...

4

2 回答 2

6

Jetty 包含自己的 JSTL 库,无需包含 jakrta taglib 的标准和核心 jar。

如果您确实将 jakartat taglib 的 jar 放入您的 Web 应用程序,那么在 forTokens 标记中存在冲突会导致此错误,而其他标记工作正常。我建议要么从您的网络应用程序中删除 jakarta taglib 实现并依赖 Jetty,要么停止使用 forTokens。

于 2009-03-12T11:52:22.563 回答
4

@Guss 是正确的,唯一的出路似乎是避免使用c:forTokens.

示例替代c:forTokens使用c:forEach

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<c:forTokens items="${input}" delims="," var="i">
     <!-- do stuff with ${i} -->
</c:forTokens>

<c:forEach items="${fn:split(input,',')}" var="i">
     <!-- do stuff with ${i} -->
</c:forEach>
于 2010-06-09T12:45:32.220 回答