2009-02-27 16 views
6

我試圖運行在Tomcat 5.5中運行良好的碼頭中的應用程序。該應用程序使用servlet 2.4和JSP 2.0。賈斯珀在碼頭6拋出JSTL標記異常

碼頭/曾鈺成引發此異常:

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的taglib標準和核心罐子。

如果您確實將jakartat taglib的jar放入您的web應用程序,那麼在forTokens標記中會有一個衝突導致此錯誤,而其他標記正常工作。我建議你從你的web應用中移除jakarta taglib實現,並依賴Jetty,或停止使用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 2011-05-20 09:51:18