Bookmarkable PrimeFaces数据分页器



是否有办法从PrimeFaces实现<p:dataTable>的书签分页器?例如,在<p:dataTable>row="10"上,当我按分页按钮到第二页时,url变成http://example.com/list.xhtml?first=10&max=10.

据我所知,基本上你必须自己创建它。因此,如果你想拥有与primefaces示例相同的分页模板,你将不得不重新创建css.

创建一个自定义的非常简单:datatable的第一个paginator被设为false,因为你要自定义一个。然后在dataTable上创建两个链接:

这是来自new.xhtml:

<div class="nextPrevBlock">
    <h:panelGroup rendered="#{page>0}" style="margin-right:1em;">
        <h:link outcome="new.xhtml">
            <f:param name="page" value="#{page - 1}"/>
            <div class="btnLink">
                <h:outputText value="#{strings.previous}"></h:outputText>
            </div>
        </h:link>
    </h:panelGroup>
    <h:panelGroup>
        <h:link outcome="new.xhtml">
            <f:param name="page" value="#{page + 1}"/>
            <div class="btnLink">
                <h:outputText value="#{strings.next}"/>
            </div>
        </h:link>
    </h:panelGroup>
</div>

使用getter和setter将页面存储在Managed Bean中。然后使用页面:

进行查询
//it's requestScoped
@EJB
private ElemService elementService;
private List<Element> elementList;
@PostConstruct
public void init() {
    FacesContext fc = FacesContext.getCurrentInstance();
    Map<String, String> paramsMap = fc.getExternalContext()
            .getRequestParameterMap();
    try {
        page = Integer.parseInt(paramsMap.get("page"));
        if (page < 0)
            page = 0;
    } catch (Exception e) {
      page = 0;
    }
    getElementsOfPage(page);
}
public void getElementsOfPage(int page) {
    elementList = elementService.getElemByPage(page);
}

为您服务:

@Override
public List<Element> giveElementList(int page) {
    Query query = em.createQuery(SELECT_NEWEST_THREADS);
    query.setFirstResult(page * NUMBER_OF_ELEMENTS_PER_PAGE);
    query.setMaxResults(NUMBER_OF_ELEMENTS_PER_PAGE);
    return query.getResultList();
}

setFirstResult()是第一个结果,因此您必须将页的值乘以逐页的元素。setMaxResults就是你想要的逐页元素。

你必须自定义它,使它适合你的需要。

相关内容

  • 没有找到相关文章

最新更新