gpt4 book ai didi

java - 使用 JSF PrimeFaces 时,java.lang.String 类型的属性不可读

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:58 26 4
gpt4 key购买 nike

我正在尝试使用站点中的演示代码在数据表中实现延迟加载数据

PrimeFaces Lazy loading

我得到了错误

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

这是我的 table.xhtml 代码

<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代码

@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;
}
}

汽车代码

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;
}
}

和 LazyCarDataModel 代码

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;
}
}
}

请帮忙。

提前致谢。

最佳答案

模型类,在本例中 Car 必须是公开的。

关于java - 使用 JSF PrimeFaces 时,java.lang.String 类型的属性不可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com