-1

我正在迭代具有实例变量statisticsCurrency 的EquityStatisticsSet 类型的unmodifiableSet。在迭代时我收到以下错误属性'statisticsCurrency' not found on type java.util.Collections$UnmodifiableSet。

我哪里错了?请帮助我。

以下是 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>

爪哇代码:

 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)
4

1 回答 1

1

在即将到来的 JSF 2.2 之前UIData组件不支持Set接口。它们仅支持例如DataModel, List, Object[],ResultSet等。根据 JSF 2.2,Collection将添加 ,这不仅包括List,还包括Set.

您当前最好的选择是借助新的 EL 2.2 调用任意方法的能力将 转换Set为数组:Set#toArray()

<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}">
于 2013-04-20T21:38:19.290 回答