【发布时间】:2019-12-06 20:19:37
【问题描述】:
我正在尝试使用复选框过滤器通过布尔列过滤我的 primefaces 数据表,但不幸的是,在 primefaces 数据表中过滤似乎不适用于String以外的任何类型,但应该有一种解决方法。
数据表列
<p:column headerText="A_boolean_column" filterBy="#{myBean.myBoolean}" filterMatchMode="exact">
<f:facet name="filter">
<p:selectCheckboxMenu label="BooleanFilter" onchange="PF('mydatatable').filter()" styleClass="custom-filter">
<f:selectItems value="#{myBean.possibleAnswers}" />
<p:ajax update="@form" oncomplete="PF('mydatatable').filter();"/>
</p:selectCheckboxMenu>
</f:facet>
<h:outputText value="#{myBean.myBoolean}"/>
</p:column>
其中 possibleAnswers 变量是已在 myBean 的 init 方法上使用 true && false 值初始化的列表
@PostConstruct
public void init(){
this.possibleAnswers= new ArrayList<>();
possibleAnswers.add(true);
possibleAnswers.add(false);
}
我的数据表中有类似的带有文本值的工作示例,并且运行良好。当然,我可以通过将值从boolean(true / false)转换为String(“true”/“false”)(甚至编写一个自定义函数来检查平等)但我不太喜欢这个解决方案,我更喜欢任何其他开箱即用的解决方案(也许是不同的filterMatchMode?)。
我正在使用 primefaces 7.0
【问题讨论】:
-
您确定需要两次
PF('mydatatable').filter();吗?在 onchance 和点击 ajax 中? -
你说得对,其实这两个地方都放
filter()好像是多余的,会不会有什么副作用? -
否(但我不会使用 ajax...)更新表单也可能会导致奇怪的行为
-
其实我在想.. 将 ajax 事件的完整方法上的表格过滤为最后一个事件发生不是更明智吗?
-
在选择上执行 ajax 并不好(它甚至可能是不确定的)。如果您需要更新数据表以外的其他内容(并将其排除在外,例如不是围绕数据表的表单),请将 ajax 过滤器事件添加到数据表并对其进行更新。
标签: jsf primefaces datatable