无法访问java.util.Collections $ UnmodifiableSet类型的属性

时间:2013-04-20 11:25:51

标签: java jsf-2

我正在迭代具有实例变量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)

1 个答案:

答案 0 :(得分:1)

Until the upcoming JSF 2.2UIData个组件不支持Set接口。他们只支持例如DataModelListObject[]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}">