2011-05-18 40 views
1

由於problem with @ViewScoped,我必須在我的facelet中使用ui:repeat而不是c:foreach。但是我遇到這個問題,我想知道是否有人可以提出解決方法。ui:重複var屬性不按預期方式工作

<ui:repeat value="#{someBean.idCodes}" 
      var="led"> 
      <h:outputText id="mailbox-#{led}" 
       value="#{someBean.getSomeValue(led)}" /> 
</ui:repeat> 

第一個問題是#{led}引用是id屬性沒有得到評估。所有生成的id屬性都只是值「mailbox-」。我需要找到具有document.getElementById()的特定元素實例,所以我需要生成的ID屬性。

另一個我看不到解決方法的問題是,如果我在h:panelGrid元素中包裝ui:repeat元素,我最終會得到一個包含一個單元格的表格,而不是一個單元格idCodes集合的每個成員。

當使用c:foreach這些問題都不存在,但使用該標籤會導致其他問題。有什麼建議麼?

回答

1

請注意,在javadocs中,id屬性的類型是String,而不是ValueExpression。這就是爲什麼你的$ {led}沒有被評估。您可以嘗試將每個元素封裝在div或span中,並將該元素的id設置爲基於$ {led}的表達式。

+0

在詳細資料中貶值。你的建議奏效了。有趣的是,爲什麼它會與c:foreach一起工作。我沒有看過這個實現,但是它暗示了處理遵循不同規則的JSTL標籤是不同的。 – AlanObject 2011-05-18 19:25:06

+0

此博客文章http://www.ilikespam.com/jsf/c%3Aforeach-vs-ui%3Arepeat-in-facelets解釋瞭如何處理jstl標籤與本機JSF標籤不同的處理方式,以及爲什麼混合這兩種方法是不好的理念。每個JSF程序員都應該閱讀這篇文章。 – digitaljoel 2011-05-18 19:47:18