Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf Primefaces对具有子表的数据表进行筛选/排序_Jsf_Primefaces - Fatal编程技术网

Jsf Primefaces对具有子表的数据表进行筛选/排序

Jsf Primefaces对具有子表的数据表进行筛选/排序,jsf,primefaces,Jsf,Primefaces,假设我有下表: <p:dataTable id="genaricTable" var="item" value="#{genaricBean.currentValue}" > <p:columnGroup type="header"> <p:row> <p:column rowspan="" headerText="value1"/>

假设我有下表:

        <p:dataTable id="genaricTable" var="item" value="#{genaricBean.currentValue}" >
            <p:columnGroup type="header"> 
                <p:row>
                    <p:column rowspan="" headerText="value1"/>
                    <p:column rowspan="" headerText="value2"/>
                    <p:column rowspan="" headerText="value3"/>
                </p:row> 
            </p:columnGroup>  
            <p:subTable var="subItem" value="#{item.subItemList}" >
                <f:facet name="header">  
                  #{item.header}
                </f:facet> 
                <p:column>
                    <h:outputText value="#{subItem.value1}"/>
                </p:column>
                <p:column>
                    <h:outputText value="#{subItem.value1}"/>
                </p:column>
                <p:column>
                    <h:outputText value="#{subItem.value1}"/>
                </p:column>
            </p:subTable>
        </p:dataTable>

#{item.header}

是否有一种方法可以通过具有内置primefaces组件的子列表进行过滤/排序?我能想到的唯一一件事就是加入一个自定义命令链接来完成这项工作。

要对子列表进行排序,可以在子列中添加sortBy..类似的东西

            <p:column sortBy="#{subItem.value1}">
                <h:outputText value="#{subItem.value1}"/>
            </p:column>


试试看。

你说得对。将sortBy属性添加到子表内部的列定义时,该属性不起作用

然而,有一个非常简单的解决办法。将其添加到标题列组内的列定义中。PrimeFaces不处理此属性(如果在其中定义)

我想这种方法可能也适用于过滤器by,但我没有尝试过

<p:columnGroup type="header"> 
    <p:row>
        <p:column rowspan="" headerText="value1" sortBy="#{subItem.value1}"/>
        <p:column rowspan="" headerText="value2"/>
        <p:column rowspan="" headerText="value3"/>
    </p:row> 
</p:columnGroup>


编辑:您当然需要考虑底层数据集,可能使用不同的排序表达式,或者在托管Bean中编写一些变通方法,因为分层数据从来没有这么简单。我使用这个表达式只是为了说明解决方案。

是的,显然我已经尝试过这个方法,但没有效果。应该吗?正如Feva所指出的,层次数据结构和子表的特殊性并不能很好地工作。作为一种解决方法,如何将子表伪装成几个表,并使用CSS给它们一个大表的感觉?