我应该早点问这个问题,但现在我真的厌倦了躲避这个问题:
我有一个普通的数据表
<p:dataTable id="dt1" var="tVar" value="#{mrBean.queriedElements}" filteredValue="#{mrBean.filteredElements}" ...
现在除了primefaces过滤器之外,我还创建了自己的panelGrid,您可以在其中将过滤器应用于数据库,该数据库在任何PF操作之前都有效。 存在以下列表:queriedElements,其中包含应用个人过滤器后返回的所有数据以及primefaces数据表过滤所需的filteredElements。另外,我不确定我是否需要一个表示数据库中所有数据的元素列表。如果未应用个人过滤器,则查询元素= allElements。
数据表显示有关所包含对象的大量信息,您可以通过对话框更改这些对象。我想要以下内容:
这样做的最佳做法是什么?如何避免queriedElements和filteredElements的冗余代码(如果除了数据库合并之外我必须迭代它以显式更改它)?我找到了分页的第一个属性,但我并不确定如何正确使用它与我的其他要求相结合。我的主要问题是,如果我不从数据库中重新提取,那么数据表几乎从不显示正确的值。
PF 4.0
答案 0 :(得分: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的问题,但这肯定会帮助其他人解决过滤掉的问题。