我想就此提出您的意见和建议。我正在为jsf中的页面做分页。数据表通过“绑定”属性绑定到Backing Bean属性。我有2个布尔变量来确定是否渲染'Prev'和'Next'Button - 它显示在数据表下方。当单击“上一个”或“下一个”按钮时,在支持bean中,我获得绑定的dataTable属性,通过该属性,我获得数据表的“first”和“rows”属性并相应地更改。我在页面中显示5行。请评论并建议是否有更好的方法。顺便说一句,我对任何JSF组件库都不感兴趣,但只坚持使用核心html渲染工具包。
public String goNext()
{
UIData htdbl = getBrowseResultsHTMLDataTable1();
setShowPrev(true);
//set Rows "0" or "5"
if(getDisplayResults().size() - (htdbl.getFirst() +5)>5 )
{
htdbl.setRows(5);//display 5 rows
}else if (getDisplayResults().size() - (htdbl.getFirst() +5)<=5) {
htdbl.setRows(0);//display all rows (which are less than 5)
setShowNext(false);
}
//set First
htdbl.setFirst(htdbl.getFirst()+5);
return "success";
}
public String goPrev()
{
setShowNext(true);
UIData htdbl = getBrowseResultsHTMLDataTable1();
//set First
htdbl.setFirst(htdbl.getFirst()-5);
if(htdbl.getFirst()==0)
{
setShowPrev(false);
}
//set Rows - always display 5
htdbl.setRows(5);//display 5 rows
return "success";
}
答案 0 :(得分:1)
请评论并建议是否有更好的方法。
嗯,这没什么可回答的。如果你要求的话,至少不是“我”的方式。长话短说:Effective datatable paging and sorting。你只需要战斧(面对它,它有它的优点)。但是如果你已经使用JSF2 + Facelets而不是JSF1 + JSP,那么你实际上也可以使用ui:repeat
和@ViewScoped
代替t:dataList
和t:saveState
。
答案 1 :(得分:0)
我们可以使用 'Repeat' 组件 - 这类似于 Primefaces 中的 dataList 或 dataTable 组件
<p:repeat id="repeatComponent" var="education" value="#{backingBean.educationList}" emptyMessage="No records found">
<h:panelGroup>
<p:outputLabel for="center" value="Education Center:" />
<br />
<h:panelGroup>
<h:outputText id="center" value="#{education.centerName}">
</h:outputText>
</h:panelGroup>
</h:panelGroup>
</p:repeat>
这类似于java中的for循环
var - 这充当循环迭代器 值 - 接受列表对象 emptyMessage - 接受字符串值,当传递的列表对象为空时显示