我使用Hibernate从数据库中获取数据,并在程序中的数据表中显示数据
现在我必须通过延迟加载Primefaces Datatable显示数据
我不知道该如何更改我的代码。我搜索互联网,但仍然找不到。
(我想要在数据表中显示带有延迟加载的列表testList)
XHTML文件:
<p:dataTable var="test" value="#{testMB.testList}" id="testTable"width="100%" liveResize="true">
ManagedBean文件
private List<TestDTO> testList = new ArrayList<TestDTO>();
public List<TestDTO> getTestList() {
return logList;
}
public void setTestList(final List<TestDTO> pTestList) {
testist = pTestList;
}
TestDTO类
public class TestDTO implements Serializable {
private static final long serialVersionUID = XXXXXXXXXXXXXXL;
private String XXXXXXXX;
private Date XXXXXXXX;
private String XXXXXXXX;
private Long XXXXXXXX;
private Long XXXXXXXX;
private Long XXXXXXXX;
private String XXXXXXXX;
private String XXXXXXXX;
........
最佳答案
您必须实现LazyDataModel类以进行延迟加载,而不是使用常规的ArrayList,并且应该在数据表中将lazy设置为true。
<p:dataTable var="test" value="#{testMB.testList}" id="testTable"width="100%" liveResize="true" lazy="true">
您可能会考虑打开分页器以及它用于延迟加载的目的。
更多信息:http://www.primefaces.org/showcase/ui/data/datatable/lazy.xhtml
LazyDataModel类的示例。
class LazyTestDataModel extends LazyDataModel<TestDTO> implements Serializable {
private static final long serialVersionUID = 1L;
@Override
public List<TestDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder,
Map<String, Object> filters) {
try {
Map<String, Object> params = PrimefacesBeanUtils.populatePaginationMap(first, pageSize, sortField, sortOrder, filters);
setRowCount(testService.getListCount(params));
if (getRowCount() > 0) {
return testService.getList(params);
}
} catch (Throwable t) {
errorResult(t);
}
return null;
}
}