【问题标题】:JSF dataTable: conditional filter facetsJSF dataTable:条件过滤器方面
【发布时间】:2016-09-21 07:43:02
【问题描述】:

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

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

是否可以有条件地显示不同的过滤器构面或构面内的输入类型?

【问题讨论】:

  • 您找到解决方案了吗?我也有同样的问题。
  • 到目前为止有什么解决方案吗?我也有同样的问题!

标签: jsf input primefaces filter facet


【解决方案1】:

我发现的唯一“解决方案”是始终使用 selectOneMenus 并使它们可编辑,并且如果过滤器类型为“TEXT”,则看起来像 inputTexts

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

【讨论】:

  • 尝试将两个输入包装在一个 span/div 中?
  • 感谢您对解决方法的反馈! ...不幸的是,它对我不起作用,因为我需要一个 控件,因此必须选择几个值。 @Kukeltje 我试过用 div/span 包装两个控件(包装两个和每个) - 没有帮助。您还有其他想法吗?欢迎您分享!
【解决方案2】:

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

<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,对于 List 是 Equals。

【讨论】:

  • 名称必须是“过滤器”。这是过滤器构面的预定义名称。如果更改名称,输入类型将不再显示在表头中...
  • 我们正在使用 并且它是可见的。
  • 它必须是我动态创建的数据表标题中每一列的过滤器......像这样:primefaces.org/showcase/ui/data/datatable/filter.xhtml
  • 感谢您的努力,但您似乎不明白我在做什么。由于它是 动态 创建的表,因此没有 标记,但只有一个 如果我手动创建表并且每一列我不会遇到问题...
  • 我还没有测试过,但是你可以试试 JSTL if-else 选项。
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2013-06-02
  • 2011-09-22
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
相关资源
最近更新 更多