Jetty 6中的Jasper抛出了JSTL标记的异常

时间:2009-02-27 15:53:07

标签: jstl jetty

我正在尝试在Jetty中运行一个在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没有在项目的加载路径中找到它。

任何提示都欢迎......

2 个答案:

答案 0 :(得分:6)

Jetty包含他们自己的JSTL库,不需要包含jakrta taglib的标准和核心jar。

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

答案 1 :(得分: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>