Primefaces数据表页

Primefaces数据表页,primefaces,Primefaces,我的数据表中有大约1000个项目。如果我转到第5页,然后导航到页面上的其他内容,我需要为datatable尝试收集的数据设置当前页面,但不显示任何行,因为它似乎“记住”了它所在的最后一页 我想将当前页面设置为托管bean中的第一个页面——有什么方法可以做到这一点吗 我已经看到您可以在onclick中添加这样的事件,但我认为我唯一的选择是添加这个,也就是说,在我的lazyloader中添加方法,以确保当要显示的项目小于pagesize时,它位于第一页: myWidget.getPaginator(

我的数据表中有大约1000个项目。如果我转到第5页,然后导航到页面上的其他内容,我需要为datatable尝试收集的数据设置当前页面,但不显示任何行,因为它似乎“记住”了它所在的最后一页

我想将当前页面设置为托管bean中的第一个页面——有什么方法可以做到这一点吗

我已经看到您可以在onclick中添加这样的事件,但我认为我唯一的选择是添加这个,也就是说,在我的lazyloader中添加方法,以确保当要显示的项目小于pagesize时,它位于第一页:

myWidget.getPaginator().setPage(0);
谢谢,
Mike

如果只是想将Primefaces Datatable从ManagedBean代码切换到第一页,则可以使用
Datatable.setFirst()
来实现这一点:

示例托管bean:

import javax.enterprise.context.requestscope;
导入javax.faces.context.FacesContext;
导入javax.inject.Named;
导入org.primefaces.component.datatable.datatable;
@命名
@请求范围
公共类MyBean{
私有数据表findDataTable(){
FacesContext ctx=FacesContext.getCurrentInstance();
//从viewRoot中查找DataTable组件
DataTable=(DataTable)ctx.getViewRoot().findComponent(“myForm:myDataTable”);
返回数据表;
}
公共无效gotoFirstPage(){
DataTable DataTable=findDataTable();
//转到第一页并启动数据重新加载。
dataTable.setFirst(0);
dataTable.loadLazyData();
}
公共列表getEntries(){
// ...
}
}
XHTML中的示例表单:


#{entry}

按下按钮将使dataTable跳转到第一页。当表再次更新/呈现时,这一点就会变得可见。

或者在datatable上使用
binding=
,这会阻止遍历viewroot,并减少您对JSF Api的依赖性(这不是一个问题,但仍然是),哦,为什么中的注释不是一个解决方案呢。顺便说一句,@Kukeltje你是对的,没有研究重复的。关于
绑定
我认为这是不鼓励的,可能会导致其他问题。OP是关于导航的。因此,这不是一个解决方案,因为它只在调用操作时起作用。因此,如果用户通过使用浏览器历史记录或直接地址/URL调用来更改视图,这将没有帮助。正确的解决方案是利用支持bean的作用域,而不是与之对抗。如果您希望datatable仅在您位于当前页面时记住位置,请将支持bean放置在
@ViewScoped
中,并将其绑定到
,请编辑您的问题以澄清您正在做什么以及问题是什么。另外,提供足够的源代码以形成一个新的版本,并提及版本号也会有所帮助。
<h:form id="myForm">
    <p:dataTable id="myDataTable" value="#{myBean.entries}" var="entry"
        rows="10" paginator="true">
        <p:column>#{entry}</p:column>
    </p:dataTable>

    <p:commandButton value="go to first page!"
        action="#{myBean.gotoFirstPage()}" process="@this" update="@form"/>
</h:form>