Primefaces过滤后的数据表排序

时间:2016-01-04 17:31:07

标签: jsf jsf-2 primefaces datatable

我有一个p:dataTable存储已处理表单的结果,并执行以下操作:

  1. 填写表单值。
  2. 提交。
  3. 填充数据表 - 过滤任何列。
  4. 更改表单值。
  5. 提交。
  6. 数据表中填入了新结果。
  7. 对任何列进行排序 - 显示来自#3的过滤结果。
  8. 我有一个过滤值的arraylist,但是我没有在bean中做任何事情。在提交时,我正在调用一个actionListener,它将dataTable转换为primefaces.components.datatable.DataTable,然后在我处理表单之前调用它上面的resetValue()(参见下面的代码片段)。

    我尝试了多种方法来重置,清除和更新dataTable,但我无法解决上述问题。仅供参考,这是我的p:dataTable标签:

    <p:dataTable
                id="resultsDataTable"
                rendered="#{entityReportBean.isResultsPopulated}"
                var="change"
                value="#{entityReportBean.entityChangeDto}"
                styleClass="resultsPanel"
                rows="100"
                paginator="true"
                paginatorPosition="top"
                paginatorTemplate="#{PreviousPageLink}  Previous  {CurrentPageReport}  Next  {NextPageLink}"
                filterEvent="enter"
                filteredValue="#{entityReportBean.filteredResults}" >
    

    这是actionListener:

        public void onSubmit() {
                FacesContext context = FacesContext.getCurrentInstance();
                DataTable resultsTable = (DataTable) context.getViewRoot().findComponent("results:resultsDataTable");
                resultsTable.resetValue();
                    ...
    

    我对JSF / Primefaces相当新,所以可能会有一些我不知道的基本操作。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

所以我意识到在我的actionListener中尝试做任何事都没有意义,因为没有在sort上调用它。所以我在dataTable上添加了一个ajax'sort'事件,并向监听器添加了resultsTable.updateValue(entityChangeDto);。现在一切都很好。