Spring和JSF集成:分页

处理大型数据集时,通常需要以分页格式显示数据。 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用。
在获取分页数据时,有一些非常好的解决方案。 如果您使用的是JPA,则可能熟悉javax.persistence.Query可用的setFirstResult()setMaxResult()方法。 更好的Spring Data JPA项目提供了org.springframework.data.domain.Pageableorg.springframework.data.domain.Page接口,可直接在您的存储库中使用。
使用JSF,还有一些记录良好的显示和获取分页数据的方法。 确切的解决方案将取决于您使用的组件套件,但是大多数解决方案都基于创建自定义javax.faces.model.DataModel实现。 例如MyFaces 在其Wiki上有建议 , RichFaces在博客上发布了有关此问题的信息 , PrimeFaces提供了一个惰性加载数据表 。
最近,我一直在尝试开发一些东西来减轻JSF开发人员的负担,并消除了创建自定义DataModels和暴露它们的支持bean的需要。 基本思想是,JSF组件将使用EL表达式代表您创建延迟加载的DataModel,以根据需要获取数据。
这是一个例子:
<s:pagedData var="myDataModel" value="#{userRepository.findByLastName(backingBean.lastName, pageRequest.offset, pageRequest.pageSize)}"pageSize="20" />
这将创建一个myDataModel变量,该变量将通过调用userRepository.findByLastName()一次获取20行数据。 滚动DataModel时,将多次调用EL表达式。
(我假设您使用的是EL 2.2,如果您使用的是像Tomcat 6这样的旧服务器,则可能需要安装更新的el-impl.jar 。)
每次将EL表达式称为pageRequest变量时,都将使其可用。 此变量提供访问以下上下文信息的权限,这些上下文信息在获取数据页时可能需要:
pageNumber 要显示的页码
页面大小 请求的页面大小
抵销 偏移量(第一个结果)
sortColumn 用于对数据进行排序的列
升序 如果排序是升序还是降序
过滤器 要应用的过滤条件图
在上面的示例中创建的DataModel的一个问题是行的总数未知。 为了获得此信息,我们需要提供一个附加表达式:
<s:pagedDatavalue="#{userRepository.findByLastName(backingBean.lastName,pageRequest.offset, pageRequest.pageSize)}"rowCount="#{userRepository.countByLastName(backingBean.lastName)}" />
上面的示例还删除了varpageSize属性,这将使用默认页面大小10并使用变量名pagedData
如果您使用过Spring Data,您可能已经注意到pageRequest变量与org.springframework.data.domain.Pageable接口的相似pageRequest 。 实际上,只要Spring Data在您的类路径上, pageRequest就可以pageRequestPageable 。 此外,该组件可以理解org.springframework.data.domain.Page对象,因此您不再需要rowCount表达式。
这是一个调用spring数据存储库并使用MyFaces Tomahawk组件显示数据的示例。 此示例还允许您通过单击列标题来对数据进行排序:
<s:pagedData value="#{userRepository.findByLastName(backingBean.lastName, pageRequest)}" />
<t:dataTable value="#{pagedData}" rows="#{pagedData.pageSize}"sortColumn="#{pagedData.sortColumn}" sortAscending="#{pagedData.sortAscending}" var="user"><t:column><f:facet name="header"><t:commandSortHeader columnName="name"><h:outputText value="User Name" /></t:commandSortHeader></f:facet><h:outputText value="#{user.name}" /></t:column><f:facet name="footer"><t:dataScroller paginator="true" paginatorMaxPages="9" /></f:facet>
</t:dataTable>
我们的最后一个诀窍是确保使用PrimeFaces时创建的DataModel与org.primefaces.model.LazyDataModel兼容。 这里是与上面相同的示例,但是使用了PrimeFaces组件:
<s:pagedData value="#{userRepository.findByLastName(backingBean.lastName, pageRequest)}" />
<p:dataTable value="#{pagedData}" rows="#{pagedData.pageSize}" paginator="true" lazy="true" var="user"><p:column headerText="User Name" sortBy="#{user.name}"><h:outputText value="#{user.name}" /></p:column>
</p:dataTable>
如果您想查看任何代码,可以在GitHub上找到 (查看org.springframework.springfaces.page.uiorg.springframework.springfaces.model软件包)。 我也有一个显示页面标记的基本示例应用程序。 与往常一样,此代码是一个不断变化的目标,因此您在运行演示时可能会遇到一些问题。
参考: 集成Spring和JavaServer Faces: Phil Webb博客博客中我们的JCG合作伙伴 Phillip Webb的分页 。

翻译自: https://www.javacodegeeks.com/2012/05/spring-jsf-integration-pagination.html

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

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

相关文章

三重积分平均值_直角坐标系下的三重积分的几何可视化解释图解高等数学

12.4 直角坐标系下的三重积分三重积分假设 F(x,y,z) 为一个空间有界闭区域 D 上的函数. D 为下面立体椭球所占区域. 将空间区域分割成小长方块. 体积记为 ΔVk, 其长宽高分别为Δxk, Δyk, Δzk , 并有下列的求和式:观察下面动画, 当空间不断分割, 每个小方块的体积 ΔVk 不断变…

最短网络Agri-Net

【例4-11】、最短网络Agri-Net【问题描述】农民约翰被选为他们镇的镇长&#xff01;他其中一个竞选承诺就是在镇上建立起互联网&#xff0c;并连接到所有的农场。当然&#xff0c;他需要你的帮助。约翰已经给他的农场安排了一条高速的网络线路&#xff0c;他想把这条线路共享给…

cors-synchronous-requests-not-working-in-firefox

http://stackoverflow.com/questions/16668386/cors-synchronous-requests-not-working-in-firefox转载于:https://www.cnblogs.com/diyunpeng/p/5829594.html

硬盘接口协议

硬盘是电脑主要的存储媒介之一&#xff0c;由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。硬盘有固态硬盘&#xff08;SSD 盘&#xff0c;新式硬盘&#xff09;、机械硬盘&#xff08;HDD 传统硬盘&#xff09;、混合硬盘&#xff08;HHD 一块基于传统机械…

图的表示

Python 数据结构与算法——图&#xff08;Graph&#xff09; 1. 邻接矩阵 vs 邻接表&#xff08;压缩的邻接矩阵&#xff09; 邻接矩阵的缺点是&#xff1a; 空间占用与结点数的平方成正比&#xff0c;可能带来很大的浪费&#xff1b;邻接矩阵不容易增加新的结点&#xff0c;不…

在Java Web应用程序中阻止CSRF

跨站点请求伪造攻击&#xff08;CSRF&#xff09;在Web应用程序中非常常见&#xff0c;如果允许&#xff0c;可能会造成重大危害。 如果您从未听说过CSRF&#xff0c;建议您查看有关它的OWASP页面 。 幸运的是&#xff0c;阻止CSRF攻击非常简单&#xff0c;我将向您展示它们的工…

windows命令行无法启动redis_windows系统安装redis

1、下载最新redis https://github.com/MicrosoftArchive/redis/releases我选择下载msi版本的2.双击下载包安装3.设置redis环境变量&#xff0c;把redis路径配置到系统变量path值中4启动redis&#xff0c;cmd进入安装好redis文件夹 输入&#xff1a;如果redis启动出错Creating S…

SQL Server 筛选时间区间

一、SQL直接判断 select * from login where pass>2013/03/25 and pass < 2017/04/24 二、DATEDIFF() 函数返回两个日期之间的时间 --语法 DATEDIFF(datepart,startdate,enddate) --开始时间 startdate --结束时间 enddate --datepart datepart缩写年yy, yyyy季度qq, …

OpenShift Express Web管理控制台:入门

本周&#xff0c; 最新版本的OpenShift为已经很棒的PaaS Cloud提供商带来了两个非常好的功能。 首先&#xff0c;JBoss AS已从7.0升级到7.1&#xff0c;并且所有新的Express Web Management Console已作为预览发布。 在本文中&#xff0c;我们将研究如何使用此新控制台&#xf…

Linux-IP地址后边加个/8(16,24,32)是什么意思?

是掩码的位数 A类IP地址的默认子网掩码为255.0.0.0&#xff08;由于255相当于二进制的8位1&#xff0c;所以也缩写成“/8”&#xff0c;表示网络号占了8位&#xff09;; B类的为255.255.0.0&#xff08;/16&#xff09;; C类的为255.255.255.0(/24) /30就是255…

女士细线毛衣起多少针_从起针到缝合,教你织毛衣的各种要点(详细教程)

新手学织毛衣看过来&#xff0c;7大编织要点帮你解决织好一件毛衣的基础问题&#xff0c;满满的干货&#xff0c;每点都值得学习!一、起针二、棒针符号三、如何织小样四、依据小样推算针数收挂肩的推算五、斜肩针数的推算开前、后领的位置与针数六、袖山的推算七、如何上袖子一…

关于OPENSSL的使用

#import <Foundation/Foundation.h> interface RSAEncryptor : NSObject /** * 加密方法 * * param str 需要加密的字符串 * param path .der格式的公钥文件路径 */ (NSString *)encryptString:(NSString *)str publicKeyWithContentsOfFile:(NSString *)path; /*…

Jelastic Java云端平台

谁在Jelastic背后&#xff1f; 那是我的第一个问题&#xff0c;因此我浏览了Jelastic网站。 回答此问题的最佳方法是查看“ Jelastic团队”部分。 创始人&#xff0c;顾问&#xff0c;特殊合作伙伴构成了一支真正的专业团队。 作为特殊的合作伙伴&#xff0c;您会发现MySQL&am…

请先设置tkk_搅拌站水泥罐仓顶除尘器设置及调整

搅拌站水泥罐仓顶除尘器采用脉冲喷吹清灰系统&#xff0c;除尘器本体结构&#xff0c;采用标准模板焊接&#xff0c;整体结构&#xff0c;强度牢靠&#xff0c;组装维修方便&#xff0c;脉冲清灰采用时序控制器MCY系列 控制阀门KEK系列&#xff0c;喷吹清灰频率及喷吹间隔可手…

Eclipse Meaven Spring SpringMVC Mybaits整合

本示例是在&#xff1a;Ubuntu15上实现的&#xff1b;Windows上安装Maven将不太相同。 Maven Install Run command sudo apt-get install maven, to install the latest Apache Maven.Run command mvn -version to verify your installation.Where is Maven installed? The co…

抽象类和抽象函数

1.抽象函数的语法特征 什么是抽象函数&#xff1f; 只有函数的定义,没有函数体的函数被称为抽象函数&#xff1b; Abstract void fun(); 如果一个类拥有一个或一个以上的抽象函数&#xff0c;那么这个类必须被定义为抽象类 2.抽象类的语法特征 使用abstract定义的类被称之…

并发–执行程序和Spring集成

基于线程池/执行器的实现 比原始线程版本更好的方法是基于线程池的线程池&#xff0c;其中基于运行任务的系统定义了适当的线程池大小– CPU数量/&#xff08;任务的1-Blocking Coefficient&#xff09;。 Venkat Subramaniams书中有更多详细信息&#xff1a; 首先&#xff0c…

后面的参数_英特尔I系列CPU大家都知道,后面的参数你有没有了解过

嗨&#xff01;大家好&#xff0c;我是伟仔&#xff0c;今天主要是和大家聊下CPU。大多数人买笔记本或台式电脑对CPU的要求就知道I5或者I7之类的。像是I7一定比I5要好&#xff0c;I3很LOU这样的&#xff0c;当然这样子的观点是不正确的&#xff0c;今天我会告诉大家&#xff0c…

設置Linux保留物理內存並使用 (1)

在Linux系統中可以通過memblock來設置系統保留物理內存&#xff0c;防止這些內存被內存管理系統分配出去。 作者&#xff1a; 彭東林 郵箱&#xff1a; pengdonglin137163.com 平臺 硬件平臺&#xff1a; TQ2440 Linux版本&#xff1a;Linux 3.14.45 說明 1. 在tq2440上&#x…

移动端

http://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html 移动端手淘使用方案 移动端px自动转换rem插件 CSSREM Flexible 转载于:https://www.cnblogs.com/yuruiweb/p/6723580.html