簡體   English   中英

為什么Set在Web Flow和Primefaces中不起作用

[英]Why Set doesnt work in web flow and Primefaces

我在流程中調用了一個方法,該方法返回一個PersonHashSet 然后我用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM