【问题标题】:How to retain state (filter, selection, sorting, and pagination) of primefaces datatable如何保留primefaces数据表的状态(过滤、选择、排序和分页)
【发布时间】:2015-12-23 06:17:45
【问题描述】:

我正在使用primefaces 5.0mojarra 2.1.28。有两个选项卡,一个包含带有排序、过滤、分页和选择选项的数据表,第二个选项卡包含所选行的详细信息。在行上双击打开的第二个选项卡,其中包含所选行的详细信息。

现在的问题是,当我过滤记录并选择或双击打开详细信息的第二行选项卡时,当我回到第一个选项卡时,我的数据表重置了它的过滤器。分页也有同样的问题。

有没有办法持久化数据表的状态??

附加信息:

  1. 我没有使用惰性模型,也不想使用惰性模型。
  2. CDI bean 在视图范围内。

【问题讨论】:

  • <p:dataTable> 使用 LazyDataModel<T> 可以正确维护其状态,至少在最新版本的 PrimeFaces 中进行 Ajaxically 更新时。仅不维护初始排序顺序。延迟加载数据表/数据网格/数据列表非常有用,特别是当它们由具有大量行的巨大数据源支持时,否则无法急切加载。不清楚你为什么不想使用LazyDataModel<T>

标签: jsf jsf-2 primefaces datatable


【解决方案1】:

如果您不向我们展示代码,很难找出您的问题...

在我的想象中,您的视图如下所示:

<h:form name="form" />
  <p:tabView id="tabs">
    <p:tab title="Table Tab">
      <p:datatable widgetVar="table">
        <p:column></p:column>
        <p:ajax event=”rowDblselect” update=”:form” />
      </p:datatable>
    </p:tab>
    <p:tab title="Detail Row">
      <p:outputPanel id="details">
        <h:outputText value="#{exampleBean.rowDetail}" />
      </p:outputPanel>
    </p:tab>
  </p:tabView>
</h:form>

如果是这种情况,您将更新数据表并且不会重新应用过滤器。我建议您使用以下解决方案之一:

  1. 只需在双击事件上更新第二个标签的内容即可:

    <p:ajax event="rowDblselect" update=":form:tabs:details" />
    
  2. 更新后在数据表上调用过滤方法:

    <p:ajax event="rowDblselect" update=":form" oncomplete ="PF('table').filter();"/>
    

我认为这些解决方案之一应该可以解决您的问题。

【讨论】:

  • 当我双击一行数据表并且数据表在tab1上时,如何从tab1切换到tab2????为此,我必须更新完整的选项卡视图。不是吗??
猜你喜欢
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多