是否有办法从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
就是你想要的逐页元素。
你必须自定义它,使它适合你的需要。