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

问题描述:

我正在尝试此示例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类来显示列?

表达式变量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类吗? –

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