JSF 2.2 如何对数据表进行排序(显示首先创建的最后一个项目)



嗨,我正在尝试对我的数据表进行排序,以便用户创建的最后一个项目作为表中的第一个项目。

<h:outputText value="#{bean.pagination.pageFirstItem + 1}..#{bean.pagination.pageLastItem + 1}/#{bean.pagination.itemsCount}"/>
<h:commandLink action="#{bean.previous}" 
    value="#{bundle.Previous} #{bean.pagination.pageSize}" 
    rendered="#{bean.pagination.hasPreviousPage}"/>
<h:commandLink action="#{bean.next}" 
    value="#{bundle.Next} #{bean.pagination.pageSize}" 
    rendered="#{bean.pagination.hasNextPage}"/>
<h:dataTable value="#{metadata.placeholders}" var="placeholder">
    <h:column>
    .....
    </h:column>
</h:dataTable>

这是我的分页

公共抽象类分页助手 {

private int pageSize;
private int page;
public PaginationHelper(int pageSize) {
    this.pageSize = pageSize;
}
public abstract int getItemsCount();
public abstract DataModel createPageDataModel();
public int getPageFirstItem() {
    return page * pageSize;
}
public int getPageLastItem() {
    int i = getPageFirstItem() + pageSize - 1;
    int count = getItemsCount() - 1;
    if (i > count) {
        i = count;
    }
    if (i < 0) {
        i = 0;
    }
    return i;
}
public boolean isHasNextPage() {
    return (page + 1) * pageSize + 1 <= getItemsCount();
}
public void nextPage() {
    if (isHasNextPage()) {
        page++;
    }
}
public boolean isHasPreviousPage() {
    return page > 0;
}
public void previousPage() {
    if (isHasPreviousPage()) {
        page--;
    }
}
public int getPageSize() {
    return pageSize;
}

这就是我使用分页的方式

public PaginationHelper getPagination() {
    if (pagination == null) {
        pagination = new PaginationHelper(5) {
            @Override
            public int getItemsCount() {
                return getFacade().count();
            }
            @Override
            public DataModel createPageDataModel() {
                return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()}));
            }
        };
    }
    return pagination;
}

最终使用 JPA 进行排序。

    javax.persistence.criteria.CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    javax.persistence.criteria.Root<Offer> e = cq.from(Offer.class);
    cq.orderBy(cb.desc(e.get("id")));
    return getEntityManager().createQuery(cq.getResultList();

相关内容

最新更新