当我具有相同DataTable的多个实例时,DataTable过滤器不能在PrimeFaces上运行

时间:2015-07-24 14:42:34

标签: jsf primefaces datatable

我在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中。

有人有不同的想法吗?

提前致谢。

致以最诚挚的问候,

安东尼奥

0 个答案:

没有答案