过滤器p:由布尔列(复选框)数据表



我试图使用Boolean列使用复选框过滤器来过滤我的PrimeFaces DataTable,但不幸的是,在PrimeFaces DataTable中进行过滤似乎与String以外的任何类型都无法使用,但是应该有一个解决此案的解决方法。

DataTable列

<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 变量是已在myBeaninit使用true&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;的列表进行初始化的。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

通常,输入组件具有'value'属性,该属性绑定到背面bean中的字段(getter/setter(。该字段的类型可自动将HTTP请求的技术字符串转换为正确的Java类型。对于数据表滤波器,由于没有值属性,因此无法自动完成此操作。提供有关它们可以在其中使用的所有可能容器的所有组件知识是不良设计。因此,唯一且Corrrect解决方案是使用显式转换器。

可以查看PrimeFaces DataTable Filter Showcase中状态列的实现,据我所知,这正是您需要的

供参考:

<p:column filterBy="#{myBean.myBoolean}" filterMatchMode="in">
   <f:facet name="filter"> 
      <p:selectCheckboxMenu label="BooleanFilter" 
         onchange="PF('mydatatable').filter()" styleClass="custom-filter"> 
         <f:converter converterId="javax.faces.Boolean" /> 
         <f:selectItems value="#{myBean.possibleAnswers}" /> 
         <p:ajax update="@form" oncomplete="PF('mydatatable').filter();"/> 
      </p:selectCheckboxMenu> 
   </f:facet> 
</p:column>

最新更新