Lazydatamodel NotSerializableException子列表

时间:2018-10-12 09:08:21

标签: list primefaces sublist notserializableexception lazydatamodel

我使用primefaces tutorial实现了 LazyDataModel 并解决了问题。

如果我 返回list.sublist(...) -一切正常,但出现异常:

  

java.io.NotSerializableException:java.util.ArrayList $ SubList。

我发现subList()方法返回的List是'RandomAccessSubList'的实例,该实例不可序列化。我试图创建新列表。

如果我 返回新的ArrayList(list.sublist(...)) -异常消失,但 load()方法不是被调用,而我无法获取下一个元素块。

是否有摆脱这种烦人的异常的方法?

更新:

public class LazyApartmentDataModel extends LazyDataModel<MyEntity> implements Serializable{

private EntityManager em;
private String queryText;
private SearchCriteria searchCriteria;

public LazyApartmentDataModel() {}

public LazyApartmentDataModel(EntityManager em, SearchCriteria searchCriteria, int totalSize) {
    this.em = em;
    prepareQueryText(searchCriteria);
    this.searchCriteria = searchCriteria;
    this.setRowCount(totalSize);
}

private void prepareQueryForGrid(SearchCriteria searchCriteria) {
    StringBuilder query = new StringBuilder("select ... from ... where ... ");
    this.queryText = query.toString();
}

@Override
public List<MyEntity> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) {

    List<MyEntity> list;

    Query q = em.createQuery(this.queryText);

    // Paginate
    q.setFirstResult(first); 
    q.setMaxResults(pageSize); 
    list = query.getResultList();

    return list.subList(0,list.size());
}
}

1 个答案:

答案 0 :(得分:1)

好的,我发现了问题。 Primefaces的JS文件之一丢失了。