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

懒惰加载无数据

贺聪
2023-03-14

我试图在primefaces数据表设置中实现延迟加载。目前,在没有延迟加载实现的情况下,这是可行的,但是在实现延迟加载后,我在datatable中没有得到任何数据。但是,我可以在我的LoadData方法中打印我的列表,以验证数据是否正在加载到我的列表中,但一旦返回我的LazyModel并尝试加载datatable,似乎就会出现问题。这可能只是我忽略的一些简单的事情。非常感谢您的帮助!

这是我的屏幕截图列表制作人类代码:

    @ManagedBean
    @RequestScoped
    public class ScreenshotListProducer implements Serializable  {
       private static final long serialVersionUID = 1L;
       @Inject
       private EntityManager em;

       private List<Screenshot> screenshots;

       private LazyDataModel<Screenshot> lazyModel = null;

       private int pageSize = 5;

       public void setPageSize(int pageSize) {
           this.pageSize = pageSize;
       }

       public int getPageSize() {
           return pageSize;
       }

       @Produces
       @Named
       public List<Screenshot> getScreenshots() {
          System.out.println("************* getting screenshots list **************");
          return screenshots;
       }

       @PostConstruct
       public void LoadData() {
            lazyModel = new LazyDataModel<Screenshot>() {
                private static final long serialVersionUID = 1L;

                    @Override
                    public List<Screenshot> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {      
                    int start = first;
                    int end = first + pageSize;

                    try {
                        CriteriaBuilder cb = em.getCriteriaBuilder();
                        CriteriaQuery<Screenshot> criteria = cb.createQuery(Screenshot.class);
                        Root<Screenshot> screenshot = criteria.from(Screenshot.class);
                        criteria.select(screenshot).orderBy(cb.asc(screenshot.get("time")));

                        TypedQuery<Screenshot> s = em.createQuery(criteria);
                        s.setMaxResults(end - start);
                        s.setFirstResult(start);

                        screenshots = s.getResultList();
                        System.out.println("************* lazy screenshot list created **************");
                        for (Screenshot lazylist : screenshots) {
                          System.out.println("id numbers in lazy list: " + lazylist.getId());
                        }
                    } catch (NullPointerException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    return screenshots;
                  }
            };
       }

   public LazyDataModel<Screenshot> getLazyModel() {
        return lazyModel;
    }

这是我的截图课:

@Entity
@XmlRootElement
@Table(name="Test2012", uniqueConstraints = @UniqueConstraint(columnNames = "id"))
public class Screenshot implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "id", columnDefinition="INT")
    private Long id;

    private Timestamp time;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Timestamp getTime() {
        return time;
    }

    public void setTime(Timestamp time) {
        this.time = time;
    }   
}

这是我的xhtml代码:

    <p:dataTable id="table1" var="scrshot" rowKey="#{scrshot.id}" value="#{screenshotListProducer.lazyModel}" paginator="true" rows="7" paginatorPosition="bottom" 
                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                 rowsPerPageTemplate="7,20,50,100" widgetVar="dataTable" currentPageReportTemplate="(Number of Records: {totalRecords})"
                 emptyMessage="No screenshot data found with given criteria" lazy="true" scrollable="true" draggableColumns="true" scrollHeight="217" style="width: 100%;">  
          <f:facet name="header">  
            <p:outputPanel>  
                <h:outputText value="Search all fields: "/>  
                <p:inputText id="globalFilter" onkeyup="dataTable.filter()"/>  
            </p:outputPanel>  
          </f:facet> 
          <p:column selectionMode="multiple"/>  
          <p:column id="time" headerText="Time" sortBy="#{scrshot.time}" filterBy="#{scrshot.time}" filterMatchMode="startsWith">  
            <h:outputText value="#{scrshot.time}"/>  
          </p:column>   
          <p:column id="id" headerText="ID" sortBy="#{scrshot.id}" filterBy="#{scrshot.id}" filterOptions="#{scrshot.id}" filterMatchMode="exact">  
            <h:outputText value="#{scrshot.id}"/>  
          </p:column>  
    </p:dataTable>

共有1个答案

程景胜
2023-03-14

在懒惰加载器的情况下,您必须在加载方法中设置记录的总计数,如this.setRowCount(total_records_that_are_there);。懒惰加载器需要确定将有多少页,以便可以确定数据表上的下一个和上一个按钮(启用/禁用)。像[0是开始]和[总/rowsize]是总页数,但是你获取使用加载方法(first和page ezie=

 类似资料:
  • 我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语

  • 我们有许多通过接口扩展JpaRepository模式定义的存储库。当运行集成测试或应用程序的某些入口点时,我们只需要这些存储库的一个非常小的子集。 我们可以懒洋洋地加载实际的存储库隐含吗? 相当于@懒在@豆上的东西?注意:我至少尝试了用@lazy注释存储库接口的简单解决方案,但没有成功。

  • 这是一个概念性问题。在我的例子中,我使用slick.js为一个网站创建了一个图像旋转木马。由于这些是高分辨率照片,我希望通过允许异步加载照片而不是页面加载来加快页面加载时间。 在浏览这个库的文档时,我看到了“lazyLoad”属性的可用设置,但对于这些设置在实践中的意义,我几乎没有什么信息。 本质上,我的问题是,在延迟加载的环境中,渐进式和按需式之间有什么区别。

  • 我试着把我的头绕到相对较新的img属性“加载”上。 我知道,如果img具有load=“lazy”属性,那么它会告诉支持该属性的浏览器,在接近视口时可以加载该属性。 那么为什么不总是设置loading=“lazy”?那些立即出现在屏幕上的图像无论如何都会被渲染,因为它们已经在视口中了。因此,在这种情况下,基本上忽略了load=“lazy”。 在这个演示https://mathiasbynens.be

  • 我有一个问题,就是基于hasMany关系从数据库中获取数据并将其发送到Larave中的api。在下面的代码中,Laravel没有给我客户id=$id的产品。我不知道为什么,我不能在$query旁边发送$id。如果我把号码写在“我有很好的安全套,但我需要自动拿。 所有api代码 先谢谢你。

  • 我正在为列表视图编写一个lazyload代码,在这个代码中,我得到了一个json格式的文本和图像url,并将它们放在列表视图中。 图像和文字都相应地显示为我想要的。 我面临的问题是,当列表向下或向上滚动时,视图的索引会受到干扰。 假设我的列表中有10个元素,图像可以横向预览。最初,我可以看到4个元素的onclick操作运行良好,但当我向下滚动并单击第7个元素时,索引会受到干扰,并导致空指针异常。