我有一个动态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异常,我无法过滤我的表。 如果我只使用其中一种输入类型,则过滤按预期工作。
是否可以在小平面内有条件地显示不同的滤镜面或输入类型?
答案 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。