2009-02-27 14 views
6

Próbuję uruchomić aplikację na pomostu, która działa poprawnie w Tomcat 5.5. Aplikacja wykorzystuje serwlet 2.4 i JSP 2.0.Jasper w Jetty 6 zgłasza wyjątek dla znacznika JSTL

Jetty/Jasper rzuca ten wyjątek:

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 

Jedna dziwna rzecz, nie mogę znaleźć nigdzie TLD. Wydaje się, że otrzymuję magię, której nie rozumiem. Czy jest to prawdopodobnie złe TLD?

Trudno również stwierdzić, skąd ładuje się org.apache.taglibs.standard.tag.rt.core.ForTokensTag. Eclipse nie znajduje go w ścieżce ładowania projektu.

Wszelkie wskazówki mile widziane ...

Odpowiedz

6

Jetty zawiera własną bibliotekę JSTL i nie ma potrzeby uwzględniania Jakrta TagLib za standardowe i Core słoiki.

Jeśli umieścisz słoiki jakartat taglib w swojej aplikacji sieciowej, wystąpi konflikt w tagu forTokens, który powoduje ten błąd, gdy inne znaczniki działają dobrze. Proponuję albo usunąć implementację taglib jakarta z twojej aplikacji internetowej i polegać na Jetty, albo przestać używać forTokens.

4

@Guss jest poprawny, jedynym wyjściem jest uniknięcie użycia c:forTokens.

przykład alternatywą c:forTokens użyciu 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 Dzięki za informacje, miałem ten sam problem. – jomaora