【问题标题】:PF datatable value and filteredValue - best practisePF 数据表值和过滤值 - 最佳实践
【发布时间】:2014-06-05 11:27:02
【问题描述】:

我应该早点问这个问题,但现在我真的厌倦了回避这个问题:

我有一个普通的数据表,比如 <p:dataTable id="dt1" var="tVar" value="#{mrBean.queriedElements}" filteredValue="#{mrBean.filteredElements}" ...

现在,除了 primefaces 过滤器之外,我还制作了自己的 panelGrid,您可以在其中将过滤器应用到数据库,这些过滤器在任何 PF 操作之前工作。 存在以下列表: queriedElements 包含应用我的个人过滤器后返回的所有数据,以及 primefaces 数据表过滤所需的过滤元素。此外,我不确定是否需要一个代表数据库中所有数据的元素列表。如果没有应用个人过滤器,queriedElements = allElements。

数据表显示了有关所包含对象的大量信息,您可以通过对话框更改这些对象。我想要以下内容:

  • 保存后,更新对 selectedElement 所做的所有更改
  • 取消后,还原数据表中的所有更改(我不使用已编辑的临时对象,而是列表中的对象)
  • 关闭对话框时,记住所有过滤器和分页器位置

这样做的最佳做法是什么?如何避免 queriedElements 和 filtersElements 的冗余代码(以防我必须遍历它以显式更改它,除了数据库合并)?我找到了分页的第一个属性,但我不确定如何结合我的其他要求正确使用它。我的主要问题是,如果我不从数据库中重新获取数据,数据表几乎永远不会显示正确的值。

PF 4.0

【问题讨论】:

    标签: java primefaces datatable


    【解决方案1】:

    我不知道为什么 PF 4.0 自己不这样做,但可以在 http://www.brainhemorage.com/?p=258 找到对我有用的东西

    虽然我不得不换行

      ValueExpression filterBy = column.getValueExpression("filterBy");
       String filterField = null;
       if (filterBy != null)
          filterField = table.resolveStaticField(filterBy);
       String filterId = column.getContainerClientId(context) + separator + "filter";
       String filterValue = params.containsKey(filterId) && !table.isReset() ? params.get(filterId) : 
               table.getFilters().get(filterField); // <-- and here, was ""
       String filterStyleClass = column.getFilterStyleClass();
    

    String filterId = column.getContainerClientId(context) + separator + "filter";
    String filterValue = params.containsKey(filterId) && !table.isReset() ? params.get(filterId) : 
                table.getFilters().get(column.getFilterBy());
    

    因为 getValueExpression 总是返回 null。

    虽然这不能回答我关于 BP 的问题,但这肯定会帮助其他人解决过滤值问题。

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2014-08-01
      • 1970-01-01
      • 2020-08-01
      • 2014-05-23
      • 2015-11-16
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多