我正在迭代具有实例变量statisticsCurrency的EquityStatisticsSet类型的unmodifiableSet。迭代我得到以下错误在类型java.util.Collections $ UnmodifiableSet上找不到属性'statisticsCurrency'。
我哪里错了?请帮助我。
以下是xhtml和java文件。
.xhtml文件:
<p:dataTable id="equityStatisticsTable"
value="#{commonStockController.equityStatistics}"
var="equityStatistics">
<p:column headerText="#{res.business_equity_statistics_statisticsCurrency_Label}">
<gs:textInput
inputName="business_equity_statistics_statisticsCurrency"
inputValue="#{equityStatistics.statisticsCurrency}" />
</p:column>
java代码:
public Set<GSEquityStatistics> getEquityStatistics(){
return new HashSet<GSEquityStatistics>(commonStock.getAllStatistics());
}
public Set<GSEquityStatistics> getAllStatistics() {
return Collections.unmodifiableSet(equityStatisticsSet);
}
例外:
javax.servlet.ServletException: /content/business/security/commonStock.xhtml @166,64
inputValue="#{equityStatistics.statisticsCurrency}": Property 'statisticsCurrency' not found on type java.util.Collections$UnmodifiableSet
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
答案 0 :(得分:1)
Until the upcoming JSF 2.2,UIData
个组件不支持Set
接口。他们只支持例如DataModel
,List
,Object[]
,ResultSet
等。根据JSF 2.2,我们会添加Collection
,不仅涵盖List
,还有Set
。
目前最好的办法是在新的EL 2.2调用任意方法的帮助下,通过Set#toArray()
将Set
转换为数组:
<p:dataTable ... value="#{commonStockController.equityStatistics.toArray()}">
然而,这是相当昂贵的,因为toArray()
基本上是在每次迭代时调用的。在幕后,toArray()
遍历整个Set
并创建一个数组。没有“支持阵列”。这最终是O(n ^ 2)复杂度而不是数组中的O(1)或ArrayList
。如果你真的无法事先将它转换为数组或模型中的List
(不是在getter!中),那么你最好使用<c:set>
对它进行一次评估并将其存储在请求中范围。
<c:set var="equityStatistics" value="#{commonStockController.equityStatistics.toArray()}" scope="request" />
<p:dataTable ... value="#{equityStatistics}">