JSF dataTable:条件筛选facet



我有一个动态数据表,并希望根据列显示不同的过滤器类型,但似乎我只能在一个过滤器方面内一次使用一个对象。如果我尝试使用多个输入类型,我会得到一个

java.lang.ClassCastException: javax.faces.component.UIPanel cannot be cast to javax.faces.component.ValueHolder

我当前的(不工作的)代码是这样的:

<f:facet name="filter">
  <p:inputText onkeyup="PF('myTable').filter()" rendered="#{column.filterType=='TEXT'}" />
  <p:selectOneMenu onchange="PF('myTable').filter()" rendered="#{column.filterType=='LIST'}">
    <f:selectItems value="#{column.filterMap}" />
  </p:selectOneMenu>
 </f:facet>

inputText和selectOneMenus正确显示,但由于ClassCast Exception,我无法过滤我的表。如果我只使用其中一种输入类型,过滤将按预期工作。

是否有可能有条件地显示不同的筛选facet或facet内的输入类型?

我发现的唯一"解决方案"是始终使用selectOneMenus并使它们可编辑,如果过滤器类型为"TEXT"

 <p:selectOneMenu onchange="PF('myTable').filter()" editable="#{column.filterType=='TEXT'}" styleClass="#{column.filterType}">

根据你的第二个评论,我测试了这个代码,它的工作;其思想是过滤器依赖于列,因此:

<p:column filterBy="#{column.attribute}" filterMatchMode="contains" rendered="#{column.filterType=='TEXT'}" >
    <f:facet name="filter">
      <p:inputText onkeyup="PF('myTable').filter()" />
     </f:facet>
</p:column>
<p:column filterBy="#{column.attribute}" filterMatchMode="equals" rendered="#{column.filterType=='LIST'}">    
    <f:facet name="filter">
      <p:selectOneMenu onchange="PF('myTable').filter()" >
        <f:selectItems value="#{column.filterMap}" />
      </p:selectOneMenu>
    </f:facet>
</p:column>

显示和隐藏列,而不是过滤器。

注:inputttext的过滤模式为contains AND,对于List的过滤模式为Equals

相关内容

  • 没有找到相关文章

最新更新