JSF dataTable:条件过滤器方面

时间:2016-09-21 07:43:02

标签: jsf input primefaces filter facet

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

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异常,我无法过滤我的表。 如果我只使用其中一种输入类型,则过滤按预期工作。

是否可以在小平面内有条件地显示不同的滤镜面或输入类型?

2 个答案:

答案 0 :(得分:0)

唯一的解决方案&#34;我发现,总是使用selectOneMenus并使它们可编辑,如果过滤器类型为&#34; TEXT&#34;

,则看起来像inputTexts
 <p:selectOneMenu onchange="PF('myTable').filter()" editable="#{column.filterType=='TEXT'}" styleClass="#{column.filterType}">

答案 1 :(得分:-1)

在您的第二条评论之后我测试了这段代码并且它有效;我们的想法是过滤器取决于列,所以:

<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>

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

注意:inputText的过滤模式包含AND为等于的AND。