[英]Why Set doesnt work in web flow and Primefaces
我在流程中調用了一個方法,該方法返回一個Person
的HashSet
。 然后我用Primeface-dataTable
在我的xhtml文件中調用Set
。 現在,我想顯示該人的姓氏,但出現錯誤並說,他沒有找到“姓氏” ...
然后,我將HashSet放入ArrayList
並執行相同的操作。 而且...效果很好! 但為什么?
設置和列出用作Superinterfaces Collection
和可Iterable
。 那么,為什么這不適用於Set?
以下是文件的各個部分:
flow.xml
<view-state id="rcpm" view="rc/rcmembers.xhtml">
<on-entry>
<evaluate expression="RCHtmlCache.getCommunityList('rcpm')"
result="flowScope.members" />
</on-entry>
</view-state>
rcmembers.xhtml
<p:dataTable id="table1" var="member" value="#{members}"
sortMode="multiple" rowIndexVar="status"
emptyMessage="The Community is empty.">
<p:column>
<f:facet name="header">
<h:outputText value="Vorname" />
</f:facet>
<h:outputText value="#{member.vorname}" />
</p:column>
RCHtmlCache.java 設置版本
public Set<Person> getCommunity(String key) {
return htmlCache.get(key);
}
RCHtmlCache.java 列表版本
public List<Person> getCommunityList(String key) {
Set<Person> comList = htmlCache.get(key);
ArrayList<Person> result = new ArrayList<Person>();
for (Person person : comList) {
result.add(person);
}
return result;
}
希望你能向我解釋這個奇怪的事件。
這只是一個提示,但我認為PrimeFaces僅接受List接口,因此您不能使用Set接口,它們並不相同。
您可以使用Adapter Pattern創建自己的List + Set Adapter類。 這可能非常適合您的問題,因為您要將Set接口修改為List接口。 如果這樣做,則無需每次將Set轉換為List。
看一下這個: http : //en.wikipedia.org/wiki/Adapter_pattern
希望我能幫上忙。
DataTable可與DataModels配合使用...並且DataModels僅支持:
* java.util.List
* java.util.Object的數組
* java.sql.ResultSet(因此也支持javax.sql.RowSet)
* javax.servlet.jsp.jstl.sql.Result
*其他任何Java對象都由帶有一行的DataModel實例包裝。
(以上對象隱式用於構建DataModel)
請參閱JSF規范。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.