When using JSF primefaces, in Java Unreadable property on lang.string type

I'm trying to use the demo code in the site to implement deferred loading data in the data table

PrimeFaces Lazy loading

I received an error

javax.el.PropertyNotFoundException: /table.xhtml @14,49 value="#{car.year}": Property 'year' not readable on type java.lang.String

This is my table XHTML code

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui">

    <h:form id="form">  

<p:dataTable var="car" value="#{tableBean.lazyModel}" paginator="true" rows="10"  
              id="carTable" lazy="true">  

    <p:column headerText="Year" sortBy="year" filterBy="#{car.year}">  
        <h:outputText value="#{car.year}" />  
    </p:column>  

    <p:column headerText="Color" sortBy="color" filterBy="#{car.color}">  
        <h:outputText value="#{car.color}" />  
    </p:column>  
</p:dataTable>

Tablebean code

@ManagedBean
public class TableBean {  

private LazyDataModel<Car> lazyModel;  

private List<Car> cars;

public TableBean() {
    System.out.println("Girish");
    cars = populateRandomCars(50);
    lazyModel = new LazyCarDataModel(cars);
    lazyModel.setRowCount(10);
}

public LazyDataModel<Car> getLazyModel() {
    return lazyModel;
}

public void setLazyModel(LazyDataModel<Car> lazyModel) {
    this.lazyModel = lazyModel;
}

public List<Car> getCars() {
    return cars;
}

public void setCars(List<Car> cars) {
    this.cars = cars;
}

private List<Car> populateRandomCars( int size) {
    List<Car> list = new ArrayList<Car>();
    Car car = null;
    for(int i = 0 ; i < size ; i++) {
        car = new Car();
        car.setColor("color "+i);
        car.setYear(""+i);
        list.add(car);  
    }

    return list;
}  
}

Car code

class Car {
private String year;
private String color;



public String getYear() {
    return year;
}
public void setYear(String year) {
    this.year = year;
}
public String getColor() {
    return color;
}
public void setColor(String color) {
    this.color = color;
}
}

And lazycardatamodel code

public class LazyCarDataModel extends LazyDataModel<Car> {  

/**
 * 
 */
private static final long serialVersionUID = 1L;
private List<Car> datasource;  

public LazyCarDataModel(List<Car> datasource) {  
    this.datasource = datasource;  
}  

@Override  
public Car getRowData(String rowKey) {  

    return new Car();  
}  

@Override  
public Object getRowKey(Car car) {  
    return car.getYear();  
}  

@Override  
public List<Car> load(int first,int pageSize,String sortField,SortOrder sortOrder,Map<String,String> filters) {  
    List<Car> data = new ArrayList<Car>();  

    //filter  
    for(Car car : datasource) {  
        boolean match = true;  

        for(Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {  
            try {  
                String filterProperty = it.next();  
                String filterValue = filters.get(filterProperty);  
                String fieldValue = String.valueOf(car.getClass().getField(filterProperty).get(car));  

                if(filterValue == null || fieldValue.startsWith(filterValue)) {  
                    match = true;  
                }  
                else {  
                    match = false;  
                    break;  
                }  
            } catch(Exception e) {  
                match = false;  
            }   
        }  

        if(match) {  
            data.add(car);  
        }  
    }  


    //rowCount  
    int dataSize = data.size();  
    this.setRowCount(dataSize);  

    //paginate  
    if(dataSize > pageSize) {  
        try {  
            return data.subList(first,first + pageSize);  
        }  
        catch(indexoutofboundsexception e) {  
            return data.subList(first,first + (dataSize % pageSize));  
        }  
    }  
    else {  
        return data;  
    }  
}  
}

Please help.

Thank you in advance

Solution

Model class, in which case car must be public

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>