2011-08-02 100 views
3

我正在嘗試此示例in PrimeFaces。我只理解代碼的前幾行。PrimeFaces DataTable - 過濾(運行示例時出現的問題)

<p:dataTable var="car" value="#{tableBean.carsSmall}" 
    emptyMessage="No cars found with given criteria"> 

    <f:facet name="header"> 
     <p:outputPanel> 
      <h:outputText value="Search all fields:" /> 
      <p:inputText id="globalFilter" onkeyup="carsTable.filter()" style="width:150px" /> 
     </p:outputPanel> 
    </f:facet> 

它可以在這裏顯示一個搜索框。代碼的重命名行將是添加列並用數據填充列。我不明白是什麼

<p:column filterBy="#{car.model}" 
    headerText="Model" footerText="contains" 
    filterMatchMode="contains"> 
    <h:outputText value="#{car.model}" /> 
</p:column>` 

什麼是#{car.model}?它沒有在java類中指定任何呼叫model。我如何改變我的java類來顯示列?

回答

4

表達式變量car被聲明爲dataTable的var屬性。這意味着dataTable組件中的每個唯一行可以通過變量car在表達式語言中引用。

modelcar的屬性是Serializable POJO Car的Bean屬性。假定Car類具有屬性model,這意味着吸氣器getModel()和設定器setModel()

<p:column>filterBy屬性指定此列標題將具有其自己的唯一過濾器文本字段,並且它將過濾car.model屬性上的行。

屬性filterMatchMode指定匹配標準爲contains這意味着輸入到列過濾器字段的任何文本發生都將等同爲匹配的記錄。有關filterMatchMode選項的完整列表,請參閱Primefaces指南。

+0

+1用於解釋'filterBy'。不知怎的,跳過了。 – Jacob

+0

好吧,我設法做了同樣的例子,它不會像網站上顯示的那樣進行過濾。當我輸入字符'1'時,我得到一個完全不同的過濾結果。有沒有人遇到過這個問題。並且我也得到這個異常'''''''''''''''''''引起:java.lang.InstantiationException:mk.war.Car' – Illep

+0

這是在全局過濾器還是在列過濾器,你有這個問題?你能編輯你的問題並添加mk.war.Car類嗎? –

2
private List<Car> carsSmall; 

carsSmall是一個包含Car對象的列表。 Car在這裏輸入:

import org.primefaces.examples.domain.Car; 

Car.java Source

車是後臺bean,它有一個包含汽車的模型作爲String屬性model

在車#{car.model}這裏定義:

<p:dataTable var="car"...> 

DataTable中遍歷每個元素在列表中carsSmall,您可以訪問使用在var屬性(這裏:car)的名稱是當前元素。所以#{car.model}調用了當前Car對象的getModel()方法。

+0

嗯,我設法做了同樣的例子,它不會像網站上顯示的那樣進行過濾。當我輸入字符'1'時,我得到一個完全不同的過濾結果。有沒有人遇到過這個問題。並且我得到這個異常引起:java.lang.InstantiationException:mk.war.Car – Illep

+2

@Illep Primefaces隨機化bean中的car變量。所以顏色會和你的不同,比如模型,年份,不管什麼都會被隨機化。這意味着你永遠不會得到與primefaces相同的結果,除非你把它們全寫下來並添加相同的汽車。 – Lyrion

+0

好吧,我複製了相同的類,並沒有改變代碼。我不確定這些值是隨機生成的。但是如果我在'年份欄'中輸入'19',它不會過濾掉'19'開始的所有'年份'。所以這就是我需要找到的 – Illep