当前位置: 首页 > 知识库问答 >
问题:

JSF2 Primeface: DataTable延迟加载问题

贺君浩
2023-03-14

我想,我的java代码是正确的,但记录并没有显示在dataTable上。

请检查下面的代码。我不知道我在哪里犯了错误。

.xhtml

 <p:dataTable value="#{userDetailList.userDataList}" var="user" rows="5" 
                            paginator="true" lazy="true" 
                            paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} 
{CurrentPageReport} {NextPageLink} {LastPageLink}">

                        <p:column headerText="No">
                            <h:outputText value="#{user.id}"></h:outputText>
                        </p:column>

                        <p:column headerText="User Name">
                            <h:outputText value="#{user.userName}"></h:outputText>
                        </p:column>



                    </p:dataTable>

JAVA

@PostConstruct
    public void init(){
        // +getter , setter
        userDataList = new LazyDataModel<UserDetail>(){

            private static final long serialVersionUID = 1L;

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

                return lazyDataModelCom.getResultList(first, pageSize, sortField, sortOrder, filters);
            }
        };
    }

getResultList

public List<UserDetail> getResultList(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
        Session session = HibernateUtils.getsession();

        Criteria criteria = session.createCriteria(UserDetail.class);
        criteria.addOrder(Order.asc("id"));

        for (Map.Entry<String, String> entry : filters.entrySet()) {
            if (entry.getValue() != null) {
                criteria.add(Restrictions.ilike("id",
                        "%" + entry.getValue() + "%"));         }
        }

        criteria.setMaxResults(pageSize);
        criteria.setFirstResult(first); 

        return criteria.list(); 
    }

getResultList方法返回一个正确的值,我调试它。我认为问题在于userDataList。

共有1个答案

郑博
2023-03-14

您的LazyDataModel实现未设置行数。你应该这样做:

public void init(){
    // +getter , setter
    userDataList = new LazyDataModel<UserDetail>(){

        private static final long serialVersionUID = 1L;

        @Override
        public List<UserDetail> load(int first, int pageSize, String sortField,
                SortOrder sortOrder, Map<String, String> filters) {
            userDataList.setRowCount(...);
            return lazyDataModelCom.getResultList(first, pageSize, sortField, sortOrder, filters);
        }
    };
    userDataList.setRowCount(...);
}

请注意,rowCount在分页之前但在过滤之后提供行数。

请参阅这个包含工作示例的答案(唯一的区别是它使用JPA Criteria API而不是Hibernate Criteria):

 类似资料:
  • 我有一个类,其中包含一个延迟加载的属性

  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 我似乎不能得到懒惰加载与Slick.js旋转木马工作。我可以看到图像懒惰加载时,我检查的网络选项卡中的开发工具窗口,但他们没有出现在页面上的轮播。我正在使用数据懒惰属性,并尝试制作第一张幻灯片“src”而不是“数据懒惰”,但似乎没有什么对我有用。

  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想

  • 问题内容: 我想知道在node.js中使用是否等效于延迟加载? 例如,如果我有一个函数需要代码中其他任何地方都不需要的特定node.js包,那么我最好在该函数内部使用它,以便仅在调用该函数时才包含所需的包。 我还不确定是否会由于缺乏对node.js架构的了解而在性能方面有所改善?我想它每次与服务器的连接都会使用更少的内存。但是,当它必须读取程序包时,它会增加磁盘的I / O吗,还是将其添加到内存中

  • 这是从这里开始的后续行动。 我正在实现一个表,它将数据异步加载到表单元格中。问题是,表单元格有时无法正确更新。有时它会以某种方式“挂起”并永远显示“加载...”。实际值只有在我在表中滚动一点时才会更新。 要复制,请在表格中快速向下滚动应用程序。某些单元格不会显示“延迟加载”值,而是显示占位符字符串。 延迟加载属性如下所示: } 应用程序如下所示: 完整的可运行代码可以在这里找到。