我在流程中调用了一个返回 Person
的 HashSet
的方法。然后我使用 Primeface-dataTable
在我的 xhtml 文件中调用 Set
。现在我想显示此人的名字,但出现错误,说他没有找到“名字”...
然后我将 HashSet 放入 ArrayList
并执行相同操作。而且......它工作正常!但是为什么?
Set 和 List 用作 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 接口(interface),因此你不能使用 Set 接口(interface),它们是不一样的。
您可以使用适配器模式创建自己的 List + Set 适配器类。它可能非常适合您的问题,因为您希望将 Set 接口(interface)调整为 List 接口(interface)。如果您这样做,那么您将不需要每次都将您的 Set 转换为 List。
看看这个:http://en.wikipedia.org/wiki/Adapter_pattern
希望我能帮上忙。
关于java - 为什么 Set 在 webflow 和 Primefaces 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204629/