Primefaces Datalist Pagination

时间:2012-04-21 17:53:46

标签: jsf-2 primefaces

我正在使用具有Ajax分页的数据列表,第一页加载正常,显示5个结果。它知道我有3页的结果,但当我点击第二/第三页时,我得到一个空列表。

我的模型扩展了LazyDataModel,第一次加载页面时,我可以在load()方法上设置一个断点,我可以看到它要求结果1-5,这很棒。但是点击“第2页”不会导致对load方法的另一次调用(尽管它确实会导致对我的lazyDataModel字段本身进行大约3次调用(而不是其中的load方法)。

对此有所了解,尽管阅读了很多并尝试了各种各样的事情,但我还是无法理解它应该如何运作。展示示例对我来说似乎不太完整。

这是我的代码中最相关的部分(我认为)。抱歉格式化:

@PostConstruct
public void LoadData() {
  lazyModel = new LazyDataModel<MessageboardThread>() {

  @Override
  public List<MessageboardThread> load(int first, int pageSize, String sortField, SortOrder so, Map<String, String> map) {
    List<MessageboardThread> result = new ArrayList<MessageboardThread>();

    try {
        result = mbDao.findAll(pageSize, first);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return result;
  }
};
getLazyModel().setRowCount(mbDao.count());
getLazyModel().setPageSize(pageSize);
}    

每次点击next / prev页面时都会执行此方法 / **  * @return lazyModel  * / public LazyDataModel getLazyModel(){     return lazyModel; }

这是我的xhtml文件

          <p:dataList value="#{messageboardBean.lazyModel}" var="thread" id="threads"  
                paginator="true" rows="5" effectSpeed="fast"  
                paginatorTemplate="{PreviousPageLink} {CurrentPageReport} {NextPageLink} {RowsPerPageDropdown}"  
                rowsPerPageTemplate="5,10,15" type="none"
                paginatorPosition="bottom">  

                    <f:facet name="header">  
                        Conversations 
                    </f:facet>  

                    <p:column>  
                        <h:outputText value="#{thread.title}" style="margin-left:10px" />  
                        <br />  
                    </p:column>  
            </p:dataList> 

我很难过,所以非常感谢任何帮助

PS我在那里放了一个@PostContruct注释,因为它似乎是一个很好的地方进行设置,但它可能是错的,我没有看到任何其他的例子,但后来我没有得到任何其他的例子工作要么。

1 个答案:

答案 0 :(得分:1)

解决了它。我忘了将dataList属性包装在h:form标签中。现在工作正常。