我使用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;
    }
}

09-05 02:13
查看更多