2009-02-27 2 views
6

Tomcat 5.5에서 정상적으로 작동하는 부두에서 응용 프로그램을 실행하려고합니다. 이 앱은 서블릿 2.4와 JSP 2.0을 사용합니다.JSTL 6의 Jasper가 JSTL 태그를 예외로 throw합니다.

부두/재스퍼이 예외를 던지고있다 :

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

부두는 자신의 JSTL 라이브러리를 포함하고 jakrta 태그 라이브러리의 표준 및 핵심 단지를 포함 할 필요가 없다.

jakartat taglib의 jar 파일을 웹 응용 프로그램에 넣으면 forTokens 태그에 충돌이 발생하여 다른 태그가 제대로 작동하는 동안이 오류가 발생합니다. 웹 응용 프로그램에서 jakarta taglib 구현을 제거하고 Jetty 's에 의존하거나 forTokens 사용을 중단하십시오.

4

@Guss가 맞다면, 유일한 방법은 c:forTokens의 사용을 피하는 것 같습니다. c:forEach를 사용하여 c:forTokens

예를 들어 대안 : 정보에 대한

<%@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