1

HashSetバックを返すメソッドをフローで呼び出しますPerson。次にSet、.xhtml ファイルで を呼び出しますPrimeface-dataTable。今、私は人の名前を表示したいのですが、エラーが表示され、「彼は「名前」が見つかりません...

次に、HashSet を a に入れ、ArrayList同じことを行います。そして...それはうまくいきます!しかし、なぜ?
Set と List はスーパーインターフェース Collection&として使用しIterableます。では、なぜこれが Set で機能しないのでしょうか。

ファイルの一部は次のとおりです。

フロー.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;
}

この奇妙な出来事を説明してくれることを願っています...

4

2 に答える 2

2

DataTable は DataModels で動作します...そして DataModels は次のもののみをサポートします:
* java.util.List
* java.util.Object の配列
* java.sql.ResultSet (したがって、javax.sql.RowSet もサポートし
ます) jstl.sql.Result
* その他の Java オブジェクトは、単一の行を持つ DataModel インスタンスによってラップされます。
(上記のオブジェクトは、DataModel を構築するために暗黙的に使用されます)
JSF 仕様を参照してください。

于 2013-03-04T15:36:19.903 に答える