Primefaces数据表页面

时间:2019-02-19 16:10:23

标签: primefaces

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

我想将当前页面设置为托管bean的第一页-有没有办法做到这一点?

我已经看到您可以在onclick中添加这样的事件,但是我认为我唯一的选择是在我的lazyloader中添加该方法,例如-确保在少于要显示的pagesize项:

myWidget.getPaginator().setPage(0);

谢谢, 迈克

1 个答案:

答案 0 :(得分:-1)

如果仅是要将Primefaces Datatable从ManagedBean代码切换到首页,则可以使用DataTable.setFirst()来实现:

托管豆示例:

import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import org.primefaces.component.datatable.DataTable;

@Named
@RequestScoped
public class MyBean {

    private DataTable findDataTable() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        // find the DataTable component from viewRoot
        DataTable dataTable = (DataTable) ctx.getViewRoot().findComponent("myForm:myDataTable");
        return dataTable;
    }

    public void gotoFirstPage() {
        DataTable dataTable = findDataTable();
        // go to first page and initiate data reload.
        dataTable.setFirst(0);
        dataTable.loadLazyData();
    }
    public List<String> getEntries() {
        // ...
    }
}

XHTML中的示例表单:

<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>

按下按钮将使dataTable跳转到第一页。当表再次更新/呈现时,它也是如此可见。