我在jsf文件中有一个数据表,在同一个视图中实例化了N次(我的bean是ViewScoped)。
所以,我有一个jsf文件包含在另一个中。第一个迭代一个列表,使用dataTable创建N JSF,例如:
<p:accordionPanel value="#{myMB.listOfSomething}" var="myObject">
<p:tab title="anything">
<ui:decorate template="/private/pages/jsfWithDatatable.xhtml">
<ui:param name="myObject" value="#{myObject}"/>
</ui:decorate>
</p:tab>
</p:accordionPanel>
在我的第二个JSF中,我将一些数据检索到myMB.myList,例如#{myMB.retrieveSomething(myObject)}
当我对“value”和“filteredValue”属性使用经典定义时,我的过滤器无法正常工作。像:
<p:dataTable var="myData" value="#{myMB.myList}" filteredValue="#{myMB.myFilteredList}"
paginator="true" rows="5" paginatorPosition="bottom"
rowStyleClass="lineOdd, lineEven" styleClass="dataGrid size1of1"
rowsPerPageTemplate="5,10,20,50" >
问题是:例如,当我有两个相同dataTable的实例时,数据显示正确,但是当我尝试过滤第一个dataTable时,内部数据被第二个dataTable数据覆盖。
这种情况正在发生,因为当使用primefaces实例时,第二个dataTable值和以MB为单位的filteredValue将被第二个数据覆盖。
我尝试了两种解决方案,但都不起作用:
1)参数化我的JSF文件包装我的数据类(用于值和过滤值,如List)并传递此参数,如:
<p:dataTable var="myData" value="#{myWrapperClass.myList}" filteredValue="#{myWrapperClass.myFilteredList}"
paginator="true" rows="5" paginatorPosition="bottom"
rowStyleClass="lineOdd, lineEven" styleClass="dataGrid size1of1"
rowsPerPageTemplate="5,10,20,50" >
2)在我的Bean中使用Map。像:
<p:dataTable var="myData"
value="#{myMB.myMap.get(myKey)}" filteredValue="#{myMB.myFilteredMap.get(myKey)}"
paginator="true" rows="5" paginatorPosition="bottom"
rowStyleClass="lineOdd, lineEven" styleClass="dataGrid size1of1"
rowsPerPageTemplate="5,10,20,50" >
两种解决方案都无效。过滤后,dataTable什么都不显示,它应该显示测试过滤器的一些数据。我尝试了很多小变化,我在网上搜索了很多解决方案,但我没有找到。
我正在使用primeFaces 5.2,但问题也出现在PF 3.5中。
有人有不同的想法吗?
提前致谢。
致以最诚挚的问候,
安东尼奥