日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jpa 分页 排序 过滤_使用JPA标准@ViewScoped通过分页,过滤和排序进行Primefaces DataTable延迟加载...

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jpa 分页 排序 过滤_使用JPA标准@ViewScoped通过分页,过滤和排序进行Primefaces DataTable延迟加载... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jpa 分頁 排序 過濾

Primefaces數據表惰性分頁有效,但是在Web上使用Criteria搜索完整示例后,我感到非常沮喪。 所以我混合了來自

  • http://stackoverflow.com/questions/13972193/how-to-query-data-for-primefaces-datatable-with-lazy-loading-and-pagination
  • http://www.primefaces.org/showcase/ui/datatableLazy.jsf
  • http://www.javacodegeeks.com/2012/04/lazy-jsf-primefaces-datatable.html

使用以下命令將所有內容放到一個完整的示例中:

  • Primefaces 4.0
  • TomEE 1.6.0以上
  • 標準JPA

帶有:

  • 篩選
  • 排序
  • 分頁
  • 使用@ViewScoped托管豆

讓我們開始吧:

xhtml片段

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.org/ui"> <h:body><h:form id="am"><p:dataTablevar="element"value="#{inventoryManagerMB.model}"lazy="true"paginator="true"rows="10"paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"rowsPerPageTemplate="10,50,100"id="sites"><p:column sortBy="id" filterBy="id" filterMatchMode="contains" headerText="ID"> <h:outputText value="#{element.id}" /></p:column><p:column sortBy="name" filterBy="name" filterMatchMode="contains" headerText="Name"> <h:outputText value="#{element.name}" /></p:column><p:column sortBy="siteType.name" filterBy="siteType.name" filterMatchMode="contains" headerText="Type"> <h:outputText value="#{element.siteType.name}" /></p:column><p:column sortBy="ip" filterBy="ip" filterMatchMode="contains" headerText="IP"> <h:outputText value="#{element.ip} " /></p:column><p:column sortBy="description" filterBy="description" filterMatchMode="contains" headerText="Description"> <h:outputText value="#{element.description}" /></p:column></p:dataTable></h:form> </h:body> </html>

ManagedBean

@ManagedBean @ViewScoped public class InventoryManagerMB implements Serializable {private static final long serialVersionUID = -1201944101993687165L;@EJBprivate InventoryManagerEJB inventoryManagerEJB;private LazyDataModel<Site> model;@PostConstructpublic void init() {try {this.model = new LazyDataModel<Site>(){private static final long serialVersionUID = 1L;@Overridepublic List<Site> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {List<Site> result = inventoryManagerEJB.getResultList(first, pageSize, sortField, sortOrder, filters);model.setRowCount(inventoryManagerEJB.count(sortField, sortOrder, filters));return result;}}; }public LazyDataModel<Site> getModel() {return model;}public void setModel(LazyDataModel<Site> model) {this.model = model;}(...)

EJB

@Stateless public class InventoryManagerEJB {@Injectprivate BaseService baseService;public List<Site> getResultList(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {List<Site> all = new ArrayList<Site>();all.addAll(this.baseService.getSiteDAO().getAll(first,pageSize,sortField,sortOrder,filters));return all;}public int count(String sortField, SortOrder sortOrder, Map<String, String> filters) {return this.baseService.getSiteDAO().getAll(-1,-1,null,null,filters).size();} }

基本服務

@ApplicationScoped public class BaseService implements Serializable{private static Logger log = Logger.getLogger(BaseService.class);/** persistence*/private static final long serialVersionUID = 588696475267901772L;@PersistenceContextprivate EntityManager entityManager;private SiteDAO siteDAO;@PostConstructpublic void init() {siteDAO = new SiteDAO(entityManager);}public SiteDAO getSiteDAO() {return siteDAO;}

SiteDAO

public class SiteDAO extends GenericDAO<Site>{public SiteDAO(EntityManager entityManager) {super(entityManager);}public Collection<Site> getAll(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {CriteriaBuilder cb = entityManager.getCriteriaBuilder();CriteriaQuery<Site> q = cb.createQuery(Site.class);Root<Site> site = q.from(Site.class);Join<Site,SiteType> siteType = site.join(Site_.siteType);q.select(site);Path<?> path = getPath(sortField, site, siteType);if (sortOrder == null){//just don't sort}else if (sortOrder.equals(SortOrder.ASCENDING)){q.orderBy(cb.asc(path));}else if (sortOrder.equals(SortOrder.DESCENDING)){q.orderBy(cb.asc(path));}else if (sortOrder.equals(SortOrder.UNSORTED)){//just don't sort}else{//just don't sort}//filterPredicate filterCondition = cb.conjunction();for (Map.Entry<String, String> filter : filters.entrySet()) {if (!filter.getValue().equals("")) {//try as string using likePath<String> pathFilter = getStringPath(filter.getKey(), site, siteType);if (pathFilter != null){filterCondition = cb.and(filterCondition, cb.like(pathFilter, "%"+filter.getValue()+"%"));}else{//try as non-string using equalPath<?> pathFilterNonString = getPath(filter.getKey(), site, siteType);filterCondition = cb.and(filterCondition, cb.equal(pathFilterNonString, filter.getValue()));}}}q.where(filterCondition);//paginationTypedQuery<Site> tq = entityManager.createQuery(q);if (pageSize >= 0){tq.setMaxResults(pageSize);}if (first >= 0){tq.setFirstResult(first);}return tq.getResultList();}private Path<?> getPath(String field, Root<Site> site, Join<Site, SiteType> siteType) {//sortPath<?> path = null;if (field == null){path = site.get(Site_.name);}else{switch(field){case "id":path = site.get(Site_.id);break;case "name":path = site.get(Site_.name);break;case "siteType.name":path = siteType.get(SiteType_.name);break;case "ip":path = site.get(Site_.ip);break;case "description":path = site.get(Site_.description);break;}}return path;}private Path<String> getStringPath(String field, Root<Site> site, Join<Site, SiteType> siteType) {//sortPath<String> path = null;if (field == null){path = site.get(Site_.name);}else{switch(field){case "id":path = null;break;case "name":path = site.get(Site_.name);break;case "siteType.name":path = siteType.get(SiteType_.name);break;case "ip":path = site.get(Site_.ip);break;case "description":path = site.get(Site_.description);break;}}return path;} }

實體

@Entity @Table(uniqueConstraints=@UniqueConstraint(columnNames={"name"})) public class Site implements Serializable {/****/private static final long serialVersionUID = 8008732613898597654L;@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;@Nameable@Column(nullable=false)private String name;private String ip; private String description;@ManyToOne@JoinColumn(name="siteTypeId")private SiteType siteType;(...) }

而已。 請享用。

參考: Primefaces DataTable使用我們的JCG合作伙伴 Leonardo Shikida的@ViewScoped 通過JPA Criteria進行分頁,篩選和排序的延遲加載,在Leo的Notepad博客上。

翻譯自: https://www.javacodegeeks.com/2014/01/primefaces-datatable-lazy-loading-with-pagination-filtering-and-sorting-using-jpa-criteria-viewscoped.html

jpa 分頁 排序 過濾

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的jpa 分页 排序 过滤_使用JPA标准@ViewScoped通过分页,过滤和排序进行Primefaces DataTable延迟加载...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。