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 分页 排序 过滤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通信中的backhaul

backhaul 可以翻译成回程,也叫回程线路在现有的无线通信中,backhaul指的是基站和基站控制器之间的链接(一般用户先接入基站,基站再与基站控制器通信,然后进入核心网)。在无线技术中&#xff0c;回程&#xff08;backhaul&#xff09;指的是从信元站点向交换机传送语音和数据流量…

西班牙语言,字母c的发音规则,西语初学者必看:西语29个字母解读

其实西班牙语并没有英语那么复杂的发音规则&#xff0c;除了r这个字母比较难发&#xff0c;其他几乎每一个字母都只有一个特定的音。所以对于西班牙语初学者而言&#xff0c;不用太担心&#xff0c;因为难就退却了。为了更好地帮助初学者进入学习状态&#xff0c;就西班牙语的2…

宏基站、分布式基站、小基站

基站即公用移动通信基站&#xff0c;是无线电台站的一种形式&#xff0c;是指在一定的无线电覆盖区中&#xff0c;通过移动通信交换中心&#xff0c;与移动电话终端之间进行信息传递的无线电收发信电台。 目前&#xff0c;在 5G时代 &#xff0c;“ 宏基站 为主&#xff0c; 小…

OAUTH 2.0授权码授予

OAuth 2.0提供了许多安全性流程&#xff08;或授权类型&#xff09;&#xff0c;以允许一个应用程序访问另一个应用程序中的用户数据。 在此博客中&#xff0c;我们将介绍OAuth 2.0授权&#xff1a;授权代码授权。 首先&#xff0c;有许多定义&#xff1a; 客户端 &#xff…

什么是通信卫星有效载荷(payload)

卫星一般都是由两大部分组成&#xff0c;即有效载荷平台。 有效载荷是指卫星上用于直接实现卫星的自用目的或科研任务的仪器设备&#xff0c;如遥感卫星上使用的照相机&#xff0c;通信卫星上使用的通信转发器和通信天线等&#xff0c;按卫星的各种用途包括&#xff1a;通信转发…

c语言open参数,ifstream :: open()的C类型参数

我必须使用哪种类型的文件名作为ifstream.open()的参数&#xff1f;int main(int argc, char *argv[]) {string x,y,file;string file argv[1];ifstream in;in.open(file);in >> x;in >> y;...使用此代码,我收到以下错误&#xff1a;main.cpp|20|error: no matchi…

单播、广播、组播(多播)

当前的网络中有三种通讯模式&#xff1a;单播、广播、组播(多播)&#xff0c;其中的组播出现时间最晚但同时具备单播和广播的优点&#xff0c;最具有发展前景。 一、单播&#xff08;Unicast&#xff09; 主机之间“一对一”的通讯模式&#xff0c;网络中的交换机和路由器对数…

c语言错误re,c语言malloc之后再realloc的有关问题

C/C code#include #include #include "../Status.h"#define STACK_INIT_SIZE 5 //堆栈初始大小#define STACKINCREMENT 5 //堆栈满之后再增加的大小typedef char *stackelem;typedef struct{stackelem *base,*top;int stacksize;}sqstack;/*------堆栈基本操作------…

struts2面试问题_Struts2面试问答

struts2面试问题Struts2是用Java开发Web应用程序的著名框架之一。 最近&#xff0c;我写了很多Struts2教程 &#xff0c;在这篇文章中&#xff0c;我列出了一些重要的Struts2面试问题以及答案&#xff0c;以帮助您进行面试。 什么是Struts2&#xff1f; Struts1和Struts2之间…

什么是Mesh网络

网络间的通信原理 假设你的名字叫小不点&#xff0c;你住在一个大院子里&#xff0c;你的邻居有很多小伙伴&#xff0c;在门口传达室还有个看大门的李大爷&#xff0c;李大爷就是你的网关。当你想跟院子里的某个小伙伴玩&#xff0c;只要你在院子里大喊一声他的名字&#xff0…

C语言按下列公式计算 求A20的值,2011年全国计算机二级C语言模拟试题及答案(10)...

一、 单项选择题(共30分&#xff0c;每题1分)1. 下列不正确的转义字符是( )A&#xff0e;\\B&#xff0e;\’C&#xff0e;074D&#xff0e;\02. 不是C语言提供的合法关键字是( )A&#xff0e;switchB&#xff0e;cherC&#xff0e;caseD&#xff0e;default3&#xff0e;正确的…

根据谁创建资源授权资源

我的一位同事向我提出了一个关于StackOverflow的有趣问题&#xff0c;并由于我在Spring方面的经验&#xff0c;建议我回答一个很好的问题。 问题是&#xff1a;“ 如何基于使用注释在REST中创建资源的用户来授权特定资源 。” 要点是&#xff1a; 我想做的是创建一个名为Aut…

组播详解

本文转自&#xff1a;http://liuqz926.blog.163.com/blog/static/13448936220091121104233491/ 组播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机&#xff0c;是一种一对多的通讯方式。 IP组播的好处、优势 组播协议与现在广泛使用的单播…

ccf2017除法C语言,CCF考试——201709-5除法

概要问题描述小葱喜欢除法&#xff0c;所以他给了你N个数a1, a2, ⋯, aN&#xff0c;并且希望你执行M次操作&#xff0c;每次操作可能有以下两种&#xff1a;给你三个数l, r, v&#xff0c;你需要将al, al1, ⋯, ar之间所有v的倍数除以v。给你两个数l, r&#xff0c;你需要回答…

c语言中系统函数设定像素,在imag中对每个像素应用自定义函数的快速方法

我正在寻找一种更快的方法来应用一个自定义函数到一个图像&#xff0c;我用来删除蓝色背景。我有一个函数可以计算出每个像素与背景中蓝色的距离。带有循环的原始代码如下所示&#xff1a;def dist_to_blue(pix):rdist 76 - pix[0]gdist 150 - pix[1]bdist 240 - pix[2]retu…

netbeans7.4_NetBeans 7.4的本机Java打包

netbeans7.4成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”&#xff0c;在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下…

斯坦纳点/树、泰森多边形

斯坦纳点 斯坦纳点别名正等角中心、费尔马点、斯坦纳点 在三角形的三边各向其外侧作等边三角形&#xff0c;这三个等边三角形的外接圆交于一点T&#xff0c;该点T即称为托里拆利点&#xff08;Torricelli’s point &#xff09;&#xff0c;而三个等边三角形的外接圆称为托里拆…

c语言如何将程序保存在文件,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

FXRibbon 1.2版发布

这次&#xff0c;有所不同。 Microsoft对FXRibbon的更新&#xff0c;就像Java的功能区控件&#xff08;JavaFX&#xff09;一样 。 在发出使FXRibbon做好更好的准备以将其更新到Java 9以及更高版本的要求之后&#xff0c;我借此机会还添加了一些功能&#xff0c;进行了一些美学…