Primefaces Accordion + Datatable过滤器/多项选择无法按预期工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Primefaces Accordion + Datatable过滤器/多项选择无法按预期工作相关的知识,希望对你有一定的参考价值。

我有一个搜索屏幕,显示基于搜索值组合在一起的数据。这就是显示的完成方式。我有一个从后端bean动态填充的p:accordionpanel。我在p:datatable有一个p:accordianpanel。每个可以显示多个包含数据表的手风琴面板。显示按预期工作。

问题:我在数据表上实现了过滤器和多个行选择。如果有多个数据表被填充,则过滤器和搜索仅适用于最后一个数据表。 selectionfilteredValuep:datatable属性必然是分开的对象。如果单击任何“全选”框,则会选择最后一个表中的行。我希望选中表格中与“全选”关联的行。

这是手风琴/数据表:

<p:accordionPanel multiple="true"
                  value="#{basicSearchResultsVO.sortedMessages}" var="sortedMessages">
    <p:tab title="#{sortedEdiMessages.key}">
        <p:dataTable id="dataTable"
                     emptyMessage="No Data found with searched criteria"
                     filteredValue="#{sortedMessages.value.filteredMessages}"
                     rowKey="#{message.archiveSequenceI}"
                     rows="10"
                     selection="#{sortedMessages.value.selectedMessages}"
                     sortBy="#{message.msgDateTimeTs}" sortOrder="descending"
                     value="#{sortedMessages.value.messages}" var="message"
                     widgetVar="messagesTable">
            <f:facet name="header">
                <p:outputPanel style="text-align: right;margin:3px;">
                    <h:outputText value="Search all fields:"/>
                    <p:inputText id="globalFilter" onkeyup="PF('messagesTable').filter()" style="width:150px;" placeholder="Enter keyword"/>
                </p:outputPanel>
            </f:facet>

            ...

        </p:dataTable>
    </p:tab>

    ...

</p:accordionPanel>

我不确定我错过了什么。非常感谢您的帮助和反馈。

答案

好。我发现了代码的问题。必须使数据表上的widgetVar属性唯一,以便过滤器/多选在每个数据表上正常工作。这是修改后的代码。唯一的变化是widgetVarp:datatable属性和onkeyupp:inputText属性绑定到后端bean提供的唯一值。

<p:accordionPanel multiple="true"
                  value="#{basicSearchResultsVO.sortedMessages}" var="sortedMessages">
    <p:tab title="#{sortedEdiMessages.key}">
        <p:dataTable id="dataTable"
                     emptyMessage="No Data found with searched criteria"
                     filteredValue="#{sortedMessages.value.filteredMessages}"
                     rowKey="#{message.archiveSequenceI}"
                     rows="10"
                     selection="#{sortedMessages.value.selectedMessages}"
                     sortBy="#{message.msgDateTimeTs}" sortOrder="descending"
                     value="#{sortedMessages.value.messages}" var="message"
                     widgetVar="#{sortedEdiMessages.key}">
            <f:facet name="header">
                <p:outputPanel style="text-align: right;margin:3px;">
                    <h:outputText value="Search all fields:"/>
                    <p:inputText id="globalFilter" onkeyup="PF('#{sortedEdiMessages.key}').filter()" style="width:150px;" placeholder="Enter keyword"/>
                </p:outputPanel>
            </f:facet>

            ...

        </p:dataTable>
    </p:tab>

    ...

</p:accordionPanel>

以上是关于Primefaces Accordion + Datatable过滤器/多项选择无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

向 p:datatable 添加新行,然后提交内容

Zurb Foundation Accordion 嵌套在 Accordion 内部

EasyUI系列学习-Accordion(分类)

easyui Accordion 手风琴

Javascript .accordion() 不工作[重复]

使用Semantic UI Accordion和JQuery UI Accordion时发生冲突