2009-02-27 4 views
6

Ich versuche, eine Anwendung in Jetty, die in Tomcat 5.5 einwandfrei ausgeführt wird. Die App verwendet Servlet 2.4 und JSP 2.0.Jasper in Jetty 6 löst Ausnahme für JSTL-Tag

Landungssteg/Jasper wirft diese Ausnahme:

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 

Eine seltsame Sache, ich kann nicht die TLD überall finden. Es scheint, es durch Magie zu erhalten, die ich nicht verstehe. Wird möglicherweise eine falsche TLD angezeigt?

Es ist auch schwer zu sagen, wo es org.apache.taglibs.standard.tag.rt.core.ForTokensTag lädt. Eclipse findet es nicht im Ladepfad des Projekts.

Irgendwelche Hinweise willkommen ...

Antwort

6

Jetty schließt ihre eigene JSTL-Bibliothek und es gibt keine Notwendigkeit jakrta taglib Standard und Kerngläser enthalten.

Wenn Sie jakartat taglibs jars in Ihre Webanwendung einfügen, gibt es einen Konflikt im forTokens-Tag, der diesen Fehler verursacht, während andere Tags gut funktionieren. Ich schlage vor, entweder entfernen Sie die jakarta Taglib-Implementierung von Ihrer Web-App und verlassen sich auf Jetty, oder aufhören zu verwenden forTokens.

4

@Guss ist richtig, der einzige Ausweg scheint zu sein, die Verwendung von c:forTokens zu vermeiden.

Beispiel Alternative zu c:forTokens mit 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 Danke für die Information, ich hatte das gleiche Problem. – jomaora