PrimeFaces DataTable - 过滤(运行示例的问题)

时间:2011-08-02 10:41:13

标签: java jsf datatable filtering primefaces

我正在尝试这个例子in PrimeFaces。我只了解代码的前几行。

<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类以显示列?

2 个答案:

答案 0 :(得分:4)

表达式变量car被声明为dataTable的var属性。这意味着dataTable组件中的每个唯一行都可以通过变量car以表达式语言引用。

model的{​​{1}}属性是Serializable POJO Car的Bean属性。假设Car类具有属性car,意味着getter model和setter getModel()

setModel()的{​​{1}}属性指定此列标题将具有自己唯一的过滤器文本字段,并且它将过滤filterBy属性上的行。

属性<p:column>指定匹配条件为car.model,这意味着列入过滤器字段的内容的任何文本出现都将等同为匹配记录。有关filterMatchMode选项的完整列表,请参阅Primefaces指南。

答案 1 :(得分:2)

private List<Car> carsSmall;

carsSmall是一个包含Car个对象的列表。 Car在此处导入:

import org.primefaces.examples.domain.Car; 

Car.java Source

Car是支持bean,它有一个属性model,其中包含汽车的模型String

在汽车中#{car.model}定义如下:

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

dataTable迭代列表carsSmall中的每个元素,您可以使用var属性中指定的名称(此处为car)访问当前元素。因此,#{car.model}会调用当前getModel()对象的Car方法。