2016-09-21 88 views
2

我有一個動態數據表,並希望根據列顯示不同的過濾器類型,但似乎一次只能在過濾器方面使用一個對象。如果我嘗試使用多種輸入類型,我得到一個JSF 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異常。 如果我只使用其中一種輸入類型,則過濾按預期工作。

是否可以有條件地在facet中顯示不同的過濾器構面或輸入類型?

+0

你找到一個解決辦法?我也有同樣的問題。 – ngspkinga

+0

到目前爲止的解決方案?我也有同樣的問題! –

回答

-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,對於List是Equals。

+0

該名稱需要「過濾器」。這是過濾器方面的預定義名稱。如果更改名稱,輸入類型在表頭中不再可見... – aLiEnHeAd

+0

我們正在使用,它是可見的。 – bilelovitch

+0

它必須是我的動態創建的dataTable的標題中的每個列的過濾器...像這樣:primefaces.org/showcase/ui/data/datatable/filter.xhtml – aLiEnHeAd

0

唯一的「解決方案」,我發現,是始終使用selectOneMenus,使他們可編輯的,看起來像inputTexts如果過濾器類型是「TEXT」

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

試圖在span/div中包裝兩個輸入? – Kukeltje

+0

感謝您使用解決方法提供的反饋! ...不幸的是它不適用於我,因爲我需要一個控件,所以必須選擇幾個值。 @Kukeltje我曾嘗試用div/span(包裝和每個包裝)兩個控件 - 沒有幫助。您是否還有其他想法 - 歡迎您分享! –