p:dataTable 不分页

Posted

技术标签:

【中文标题】p:dataTable 不分页【英文标题】:p:dataTable does not paginate 【发布时间】:2015-08-05 10:00:46 【问题描述】:

我有一个分页数据表:

<h:form>
    <p:dataTable var="proj" value="#orderListView.projects"
                 paginator="true" rows="3"
                 paginatorTemplate="RowsPerPageDropdown FirstPageLink PreviousPageLink CurrentPageReport NextPageLink LastPageLink"
    >
        <p:column sortBy="#proj.id">
            <h:outputText value="#proj.id" />
        </p:column>
        <p:column  sortBy="#proj.name">
            <h:outputText value="#proj.name" />
        </p:column>
        <p:column sortBy="#proj.displayName">
            <h:outputText value="#proj.displayName" />
        </p:column>
    </p:dataTable>
</h:form>

基于此实体:

@Entity
public class Project implements Serializable 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String displayName;
    private String name;

    public Project() 

    public Project(int id, String displayName, String name) 
        this.id = id; 
        this.displayName = displayName;
        this.name = name;
    

    // Getters+setters.

并且填充在这个 bean 中(为简洁起见,我省略了 DAO/Service 部分,我在 @PostConstruct 中对模型进行硬编码):

@ManagedBean
@RequestScoped
public class OrderListView 

    private List<Project> projects;

    @PostConstruct
    public void init() 
        projects = new ArrayList<Project>();
        projects.add(new Project(10, "Cruze", "cruze"));
        projects.add(new Project(11, "Dark-Hive", "dark-hive"));
        projects.add(new Project(12, "Delta", "delta"));
        projects.add(new Project(10, "Cruze", "cruze"));
        projects.add(new Project(11, "Dark-Hive", "dark-hive"));
        projects.add(new Project(12, "Delta", "delta"));
        projects.add(new Project(13, "Dot-Luv", "dot-luv"));
        projects.add(new Project(14, "Eggplant", "eggplant"));
        projects.add(new Project(15, "Excite-Bike", "excite-bike"));
        projects.add(new Project(16, "Flick", "flick"));
        projects.add(new Project(17, "Glass-X", "glass-x"));
        projects.add(new Project(18, "Cruze", "cruze"));
        projects.add(new Project(19, "Dark-Hive", "dark-hive"));
        projects.add(new Project(20, "Delta", "delta"));
        projects.add(new Project(23, "Dot-Luv", "dot-luv"));
        projects.add(new Project(24, "Eggplant", "eggplant"));
        projects.add(new Project(25, "Excite-Bike", "excite-bike"));
        projects.add(new Project(26, "Flick", "flick"));
        projects.add(new Project(27, "Glass-X", "glass-x"));
    

    public List<Project> getProjects() 
        return projects;
    

数据表正确显示列表,但分页不起作用。这是如何引起的,我该如何解决?我也尝试过延迟加载,但它也不起作用。

【问题讨论】:

我使用 Sprimg MVC 和 PrimeFaces。” - 不真实。不能一起使用它们(PrimeFaces 作为 JSF 组件库)。 对不起,Spring Core - 我已经改变了 对于延迟加载,您需要为 Project 创建lazyDateModel 并实现您自己的加载方法......您的示例甚至不接近它。 primefaces.org/showcase/ui/data/datatable/lazy.xhtml 是的,我从官方网站获取,但在我的情况下它不起作用。现在我尝试创建只有分页(没有惰性)的基本表,但分页不起作用 - 数据加载和页面存在于表中(不工作) 【参考方案1】:

我不确定您到底出了什么问题,但是我将您的代码复制到了一个测试项目中,并且分页器在 PrimeFaces 5.2 中运行良好。

【讨论】:

真的,我删除了 bootstrap 和 bootsfaces 依赖项,分页现在可以工作了! 很高兴听到这个消息!请将其发布为答案并将其标记为已接受。将引导程序包含在问题的标签中可能会很好,也许其他人将来会遇到同样的问题。 不仅包含 bootsfaces 作为标签,还包含在问题本身中

以上是关于p:dataTable 不分页的主要内容,如果未能解决你的问题,请参考以下文章

<p:dataTable> 中的 sortMode="multiple" 和 lazy="true" 在分页期间清除多排序元数据

如何从 p:dataTable 本身对 p:dataTable 进行 ajax 更新?

p:dataTable 中的 SummaryRow 不起作用

在 p:datatable 上设置页面

JSF p:dataTable 的奇怪行为(p:columns 中的第一个条目错误)

p:p:dataTable中的commandButton