2010-10-25 43 views

回答

36

沒有,ui:repeat不支持設置,也沒有h:dataTable

您應該從Set中返回一個List,然後用它來代替。

public List<T> getListFromSet(Set<T> set) { 
    return new ArrayList<T>(set); 
} 

您應該避免使用c:forEach; here is an article on why

+0

由於JSF中的getter通常被稱爲[多次](https://stackoverflow.com/questions/2090033/why-jsf-calls-getters-multiple-times),因此可以昂貴的解決方案。 – 2017-05-22 14:45:22

1

請考慮使用c:forEach代替。看來ui:repeat不支持集合(即需要某種排序屬性)。

否則在描述你可以創建自己的標籤: http://techblog.bozho.net/?p=28

+6

不要**不**考慮使用'C:forEach':http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets – 2010-10-25 18:54:13

+1

這完全取決於你正在迭代的集合是什麼,以及它是否編譯時間。所以如果是這種情況,那麼你可以使用'c:forEach'。 – AdamH 2010-10-25 18:57:24

+0

是的,如果你知道你在做什麼,那麼你可以使用'c:forEach',但是我把你的帖子看作你應該考慮使用c:forEach',事實並非如此。更好地使用'ui:repeat'來避免問題 – 2010-10-25 19:01:04

69

在頁面上完成交易而無需修改類別的最簡單方法是將set這樣轉換爲array

<ui:repeat value="#{myBean.mySet.toArray()}" var="_myvar">