jsf集成spring_Spring和JSF集成:分页

jsf集成spring

使用大型数据集时,通常需要以分页格式显示数据。 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用。
在获取分页数据时,有一些非常好的解决方案。 如果您使用的是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开发人员的负担,并消除了创建自定义DataModel和暴露它们的支持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

jsf集成spring

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

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

相关文章

mysql timestamp 并发_MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制

在将项目迁移到MySQL 5.6.10数据库上时&#xff0c;遇到和迁移到PostgreSQL数据库相同的一个问题&#xff0c;就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现。先上网搜索解决方案&#xff0c;找到Ak.Ini的博文http://www.cnblogs.com/akini/arc…

python元组操作_Python:元组操作总结

Python的元组和列表类似&#xff0c;不同之处在于元组中的元素不能修改(因此元组又称为只读列表)&#xff0c;且元组使用小括号而列表使用中括号&#xff0c;如下: 1 tup1(physics,chemistry,1997,2000)2 tup2(1,2,3,4,5,6) 特别注意: 1、元组中只包含一个元素时&#xff0c;需…

Java函数式编程:Javaslang入门

Java是一门古老的语言&#xff0c;并且有很多新手在Java&#xff08;JVM&#xff09;领域挑战它们。 但是Java 8到来并带来了一些有趣的功能。 这些有趣的功能使编写新的惊人框架&#xff08;如Spark Web框架或Javaslang&#xff09;成为可能 。 在本文中&#xff0c;我们将介…

mysql语句表名大小写敏感_Mysql 表名大小写敏感

默认情况下&#xff0c;mysql在创建数据库对象时&#xff0c;是区分大小写的。故与microsoft之间进行移植时&#xff0c;要特别注意是否存在问题。在mysql中大小写与参数lower_case_table_names有很大关系。以下为官方解释&#xff1a;If set to 0, table names are stored as …

python json是什么_python json详解

在写某狗屁不通文章生成器的时候&#xff0c;发现有个json类型的文件看不懂。 于是先来搞懂什么是json json是一种储存数据的文件类型。 说人话&#xff0c;就是一种文件&#xff0c;能够数据 类似于DOC&#xff0c;excel 之类的。 json能储存半结构化数据。 简单来说&#xff…

mobx中跟新了数据视图没变化_【第1781期】MobX 简明教程

前言SEEConf&#xff0c;2020年1月4号杭州见&#xff0c;C位抢票见文章末尾。今日早读文章由腾讯whinc投稿分享。正文从这开始&#xff5e;&#xff5e;导读&#xff1a;MobX 是一个优秀的响应式状态管理库&#xff0c;在流行的状态管理库 Redux 之外为我们提供了其他选择。如果…

excel导航窗格_Excel小技巧16:在每天的某个时刻自动打开特定工作簿

学习Excel技术&#xff0c;关注微信公众号&#xff1a;excelperfect我想要在每天下班前&#xff0c;将自已一天的工作进行整理并简短记录在一个Excel工作簿中。然而&#xff0c;有时候忙&#xff0c;可能会忘记&#xff1b;有时候到下班时间了&#xff0c;急于下班&#xff0c;…

pdf secured_使您的Spring Security @Secured注释更干燥

pdf secured最近&#xff0c;Grails用户邮件列表中的一个用户想知道在定义Secured注释时如何减少重复 。 在Java批注中指定属性的规则非常严格&#xff0c;因此我看不到直接执行他所要求的方法的方法。 使用Groovy并没有真正的帮助&#xff0c;因为Groovy类中的注释大部分与Ja…

51单片机按键控制数码管0~9_51单片机外部中断

前面为大家介绍的点亮LED灯、数码管、按键只用到了51单片机的IO资源&#xff0c;我们要是仅仅用单片机点灯、操作数码管&#xff0c;那可真是大才小用了。这些都只是51单片机资源的冰山一角&#xff0c;51单片机还有好多的功能&#xff0c;我后面将为大家一一介绍。今天为大家介…

IIS7开启gZip动态压缩

1.安装动态压缩模块&#xff1a; 安装过程可能的报错&#xff1a;This application has requested the Runtime to terminate it in an unusual way. 解决办法>> 报错&#xff1a;错误: 尝试安装 动态内容压缩 失败&#xff0c;错误代码为 0x8007000E。 存储空间不足&am…

mysql查询不重复记录数_mysql查询不重复的行内容,不重复的记录数.count,distinct

有这么一个表 记录了id, p_id, p_name , p_content , p_time 1 343 aaa aaaaaa 2012-09-01 2 344 bbb bbbbbb 2012-09-02 3 321 ccc cccccccc 2012-09-03 4 343 aaa aaaaaa 2012-09-04 想查询不重复的行的内容,并且输出 p_sum ( 产品p_id出现重复的次数) sele有这么一个表记录了…

使用Java中的FileChannel和ByteBuffer在文件中读取/写入文件

过去&#xff0c;我讨论过RandomAccessFile以及如何将其用于在Java中进行更快的IO&#xff0c;在本Java NIO教程中&#xff0c;我们将了解如何通过使用FileChannel和ByteBuffer来使用读/写数据。 Channel提供了一种从文件读取数据的替代方法&#xff0c;它提供了比InputStream…

字符,字符串,int之间互相转换

字符转换成字符串&#xff1a;String str String.valueOf(ch); 字符转换成int&#xff1a; int a ch; 字符串转换成字符&#xff1a;char ch str.charAt(0); 字符串转换成Int&#xff1a;只包含数字的字符串可以通过Integer.parseInt(str)转换为int&#xff0c;但是包含字母…

mysql 导入百万级数据 几种 java_Java 修行第034天--执行计划及其使用--Oracle数据导入导出--第三章MySQL使用...

执行计划中牢记几句话:-- 尽量避免是*代替所有列,编写查询语句时使用具体列名代替*,可以防止全表扫描-- 尽可能少的使用like关键字进行模糊查询-- 建立适当的索引可以提高查询效率十三. 执行计划--通过PL/SQL Developer查看查询的1 执行计划是一条查询语句在Oracle中的执行过程…

10g添加用户 oracle_oracle 10g中如何创建用户

登录身份 说明sys/change_on_install SYSDBA或SYSOPER 不能以NORMAL登录&#xff0c;可作为默认的系统管理员system/manager SYSDBA或NORMAL 不能以SYSOPER登录&#xff0c;可作为默认的系统管理员sysman/oem_temp sysman 为oms的用户名scott/tiger NORMAL 普通用户aqadm /aqad…

摄像头分辨率怎么调整_亿联CAM50 - 智能话机专属高清摄像头

亿联CAM50是通过USB连接的高清视频摄像机&#xff0c;适用于亿联桌面高端智能话机&#xff08;SIP-T58V和SIP-T58A&#xff09;&#xff0c;致力于提供一流的个人视频通信体验&#xff0c;优化视频协作。CAM50高清摄像机即插即用&#xff0c;无需额外安装驱动软件&#xff0c;也…

C orm mysql_Simple MySQL-C ORM

当你需要在纯C语言的应用程序中访问 MySQL 表中的数据时&#xff0c;是非常繁琐的事情&#xff0c;而该框架可以帮你大量的简化编码的工作&#xff0c;该框架采用 Python 开发&#xff0c;适用于 C 语言程序。示例代码&#xff1a;#include #include #include #include int mai…

jdbc:log4jdbc_使用Log4jdbc记录JDBC操作

jdbc:log4jdbc当我们开发任何应用程序&#xff0c;完成它或结束其任何模块时&#xff0c;我们都会开始优化过程。 大多数应用程序都包含数据库访问权限&#xff0c;如果您使用的是ORM &#xff0c;则可能会使用hibernate 。 优化Hibernate持久层&#xff0c;要求准备阅读&#…

Mac 编译安装 Redis-3.2.3

Redis官方下载地址&#xff1a;http://redis.io/download Redis安装 cd /usr/local/src/redis-3.2.3 sudo make sudo make installcp ./src/redis-benchmark /usr/local/redis/redis-3.2 cp ./src/redis-check-aof /usr/local/redis/redis-3.2 cp ./src/redis-check-rdb /usr/l…

linux c mysql教程_linux下c操作mysql之增删改查

书接上文,继续进行linux 下c操作mysql。1.创建表/插入数据mysql> desc children-> ;----------------------------------------------------------| Field | Type| Null | Key | Default | Extra |----------------------------------------------------------| childno …