2009-02-27 2 views
6

Я пытаюсь запустить приложение в причале, которое отлично работает в Tomcat 5.5. Приложение использует сервлет 2.4 и JSP 2.0.Jasper in Jetty 6 исключает исключение для тега JSTL

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 не находит его в пути загрузки проекта.

Любые намеки приветствуются ...

ответ

6

Jetty включает в свою собственную библиотеку JSTL и нет необходимости включать стандартные и основные банки jakrta TagLib в.

Если вы помещаете банки jakartat taglib в свое веб-приложение, тогда существует конфликт в теге forTokens, который вызывает эту ошибку, в то время как другие теги работают хорошо. Я предлагаю либо удалить реализацию jakarta taglib из вашего веб-приложения, либо полагаться на Jetty, либо перестать использовать forTokens.

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> 
+0

@Guss @Gareth Спасибо за информацию, я была такая же проблема. – jomaora

Смежные вопросы