【问题标题】:Primefaces Datatable pagePrimefaces 数据表页面
【发布时间】:2019-07-13 05:01:36
【问题描述】:

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

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

我已经看到你可以在 onclick 中添加这样的事件,但我认为我唯一的选择是添加这个来表示我的lazyloader 中的方法 - 以确保它在第一页上时少于要显示的页面大小项目:

myWidget.getPaginator().setPage(0);

谢谢, 迈克

【问题讨论】:

  • 利用 backing bean。如果您希望数据表仅在您在当前页面上时记住位置,请将支持 bean 放在@ViewScoped 中并将其绑定到<p:dataTable first=""。这应该在视图导航之间重新初始化 bean(和这个值)。
  • 请编辑您的问题以澄清您在做什么以及问题是什么。此外,提供足够的源代码来形成minimal reproducible example 并提及版本号也会有所帮助。

标签: primefaces


【解决方案1】:

如果您只是想将 Primefaces 数据表从 ManagedBean 代码切换到首页,您可以使用 DataTable.setFirst() 来实现:

示例托管 bean:

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>

按下按钮将使数据表跳转到第一页。只要表格再次更新/呈现,这就会变得可见。

【讨论】:

  • 或者在数据表上使用binding=,这样可以防止遍历viewroot并减少对JSF Api的依赖(虽然不是问题,但仍然)
  • 哦,为什么stackoverflow.com/questions/18765343/… 中的评论不是解决方案。 stackoverflow.com/questions/10006778/… 是重复的顺便说一句...
  • @Kukeltje 你是对的,没有研究重复。关于binding,我认为这是不鼓励的,可能会导致其他问题。
  • OP 正在谈论导航。因此,这不是一个解决方案 - 因为它仅在调用该操作时才有效。因此,如果用户通过使用浏览器历史记录或直接地址/URL 调用来更改视图,这将无济于事。正确的解决方案是利用 backing bean 的范围 - 不要对其进行操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
相关资源
最近更新 更多