2012-12-17 99 views
1

我試圖通過項目的集合迭代:問題JSP的<c:forEach>

<c:forEach items="#{tree.items}" var="item"> 
    <h:commandLink rendered="#{item.type == 'category'}" action="#{item.onNodeClicked}" 

Hovewer,我有一個例外:

javax.el.PropertyNotFoundException:類' java.lang.String'沒有'type'屬性。

看起來像JSP將樹項目識別爲字符串對象。我錯過了什麼?

回答

1

這是行不通的。 #{item}僅在查看生成時間可用,而rendered屬性在查看渲染時間期間進行評估。

改爲使用<c:if>

<c:forEach items="#{tree.items}" var="item"> 
    <c:if test="#{item.type == 'category'}"> 
     <h:commandLink ... action="#{item.onNodeClicked}" /> 

或者,如果你在JSF2(這超出了3年以上),取代傳統的JSP其繼任Facelets並使用其<ui:repeat>組件,而不是。它在視圖渲染時也被評估。

<ui:repeat value="#{tree.items}" var="item"> 
    <h:commandLink rendered="#{item.type == 'category'}" action="#{item.onNodeClicked}" /> 
+0

我應該注意到,依賴關係發生變化後出現問題。代碼沒有改變。 –

+0

沒錯(我們正在使用JSF 2。 –