primefaces_懒惰的JSF Primefaces数据表分页–第1部分

primefaces

今天,我们将使用带有视图范围的托管bean的惰性列表进行JSF数据表分页。 这些单词/表达是什么意思?

如今,有几个JSF框架可为数据表提供现成的分页,列排序器和其他功能。 今天,我们将使用Primefaces数据表。

通常,数据表会将显示的列表以及实体放入用户http会话中。 增加用户会话中的对象将直接影响服务器性能。 每个显示数据表并在会话中保留列表的用户都将在服务器中分配越来越多的内存。

为了看起来真实,我们的帖子将使用JPA和HSQLDB作为数据库,并且将使用JPQL查询数据。

在本文的结尾,您将找到下载源代码的链接。

我们将使用:

  • JSF 2.0 – JBoss 7实施
  • JBoss 7.1 –本文的代码应适用于所有服务器
  • Eclipse靛蓝
  • JPA 2.0 – JBoss 7实施
  • HSQLDB(2.2.8)– HSQL是一个内存数据库,它将更易于运行。
  • Primefaces 3.2

这篇文章不是关于好的开发实践,也不是关于添加项目建模的类层。 我只是想展示如何在没有会话托管bean的情况下进行分页。

我们只有一个实体,即Player类。 下面是班级代码:

package com.model;import java.io.Serializable;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Player implements Serializable{private static final long serialVersionUID = 1L;@Id@GeneratedValue(strategy = GenerationType.AUTO)private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int hashCode() {return getId();}@Overridepublic boolean equals(Object obj) {if(obj instanceof Player){Player player = (Player) obj;return player.getId() == getId();}return false;}
}

我们将需要在“ src / META-INF”文件夹中创建一个persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0"xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"><persistence-unit name="JSFPU" transaction-type="JTA"><jta-data-source>java:/JSFDS</jta-data-source><properties><property name="hibernate.show_sql" value="false" /><property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /><property name="hibernate.connection.shutdown" value="true" /><property name="hibernate.hbm2ddl.auto" value="create-drop" /></properties></persistence-unit>
</persistence>

为了抽象数据库事务,我们将使用一个名为MyTransaction的类:

package com.connection;import java.io.Serializable;import javax.persistence.EntityManager;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;public class MyTransaction implements Serializable {/****/private static final long serialVersionUID = 1L;private Connection connection = new Connection();   public void begin() throws NotSupportedException, SystemException {connection.begin();}public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException,SystemException {connection.commit();}public int getStatus() throws SystemException {return connection.getStatus();}public void rollback() throws IllegalStateException, SecurityException, SystemException {connection.rollback();}public void setRollbackOnly() throws IllegalStateException, SystemException {connection.setRollbackOnly();}public void setTransactionTimeout(int timeout) throws SystemException {connection.setTransactionTimeout(timeout);}public static MyTransaction getNewTransaction() {return new MyTransaction();}public EntityManager getEntityManager() {return connection.getEntityManager();}
}

您可以在上面的代码中看到,该类只是数据库连接的抽象; 它将帮助我们进行数据库查询。 您可以使用任何类型的连接,甚至可以使用EJB来避免这种手动连接管理。

检查连接类代码:

package com.connection;import java.io.Serializable;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;public class Connection implements Serializable {private static final long serialVersionUID = 1L;/*** Get the user transaction by JNDI** @return the user transaction*/public UserTransaction getUserTransaction() {UserTransaction ut = null;try {Context c = new InitialContext();ut = (UserTransaction) c.lookup("java:comp/UserTransaction");} catch (Exception e) {e.printStackTrace();}return ut;}/*** Get the EntityManayger by JNDI** @return the entity manager*/public EntityManager getEntityManager() {EntityManager em = null;try {Context initCtx = new InitialContext();// The JSFPU must be written in the web.xmlem = (EntityManager) initCtx.lookup("java:comp/env/JSFPU");} catch (Exception e) {e.printStackTrace();}return em;}public void begin() throws NotSupportedException, SystemException {getUserTransaction().begin();}public void commit() throws SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException, SystemException {getUserTransaction().commit();}public int getStatus() throws SystemException {return getUserTransaction().getStatus();}public void rollback() throws IllegalStateException, SecurityException, SystemException {getUserTransaction().rollback();}public void setRollbackOnly() throws IllegalStateException, SystemException {getUserTransaction().setRollbackOnly();}public void setTransactionTimeout(int timeout) throws SystemException {getUserTransaction().setTransactionTimeout(timeout);}
}

我们可以使用JSF注入的UserTransaction,但我们选择使用JNDI查找。 有几个在JSF上下文之外调用的Primefaces调用,如果尝试访问应注入的引用,则可能会收到NullPointerException。 有几种方法可以解决此问题,但是我们将对EntityManager和UserTransaction使用JNDI查找。

我们的最后一堂课是PlayerDAO:

package com.dao;import java.io.Serializable;
import java.util.List;import javax.persistence.EntityManager;
import javax.persistence.Query;import com.connection.MyTransaction;
import com.model.Player;public class PlayerDAO implements Serializable {private static final long serialVersionUID = 1L;private MyTransaction myTransaction;public PlayerDAO(MyTransaction transaction) {this.myTransaction = transaction;}/*** Find players in the DB** @param startingAt the first "row" db that the query will search* @param maxPerPage the amount of records allowed per "trip" in the DB* @return a players java.util.List*/@SuppressWarnings("unchecked")public List<Player> findPlayers(int startingAt, int maxPerPage) {EntityManager em = myTransaction.getEntityManager();// regular query that will search for players in the dbQuery query = em.createQuery("select p from Player p");query.setFirstResult(startingAt);query.setMaxResults(maxPerPage);return query.getResultList();}/*** Creates 100 players in the DB*/public void create100Players() {EntityManager em = myTransaction.getEntityManager();Player player;for (int x = 0; x < 100; x++) {player = new Player();player.setName("Player: " + x);player.setAge(x);em.persist(player);}em.flush();}/*** Sum the number of players in the DB** @return an int with the total*/public int countPlayersTotal() {EntityManager em = myTransaction.getEntityManager();Query query = em.createQuery("select COUNT(p) from Player p");Number result = (Number) query.getSingleResult();return result.intValue();}
}

在PlayerDAO类中,只有3种方法可用于分页。 注意,没有方法可以列出数据库中的所有玩家。

创建文件夹“ YOU_JBOSS / modules / org / hsqldb / main”。 在此文件夹中,创建一个名为“ module.xml”的文件。 将下面的代码写在“ module.xml”文件中:

<module xmlns="urn:jboss:module:1.0" name="org.hsqldb"><resources><resource-root path="hsqldb.jar" /></resources><dependencies><module name="javax.api" /><module name="javax.transaction.api" /></dependencies>
</module>

将“ hsqldb.jar”文件复制到刚创建的文件夹“ main”中。 您可以在下载的HSQLDB jar内找到该文件,路径为“ hsqldb-2.2.8.zip/hsqldb-2.2.8/hsqldb/lib”。

编辑文件“ YOU_JBOSS / standalone / configuration / standalone.xml”,然后在“数据源”节点中添加以下代码:

<datasource jndi-name="java:/JSFDS" pool-name="JSFDS_POOL"enabled="true" jta="true" use-java-context="true" use-ccm="true"><connection-url>jdbc:hsqldb:mem:jsfinmemory</connection-url><driver>hsqldb</driver><pool><prefill>false</prefill><use-strict-min>false</use-strict-min><flush-strategy>FailingConnectionOnly</flush-strategy></pool><security><user-name>sa</user-name><password></password></security>
</datasource>

在驱动程序节点中添加:

<driver name="hsqldb" module="org.hsqldb"/>

参考: uaiHebert博客上的JCG合作伙伴 Hebert Coelho的懒惰JSF数据表分页(Primefaces) 。


翻译自: https://www.javacodegeeks.com/2012/04/lazy-jsf-primefaces-datatable.html

primefaces

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

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

相关文章

linux下python开发环境搭建_linux下python开发环境之二——安装Eclipse+PyDev

Eclipse是由java开发的&#xff0c;所以要想让Eclipse跑起来就得安装jdk&#xff0c;在命令行里输入javac就能查看本机是否已经安装好了jdk了。1、安装jdk先从oracle官网上下载jdk&#xff0c;放到/usr/local/src/文件中&#xff0c;由于找不到linux的下载连接&#xff0c;所以…

台式计算机如何连接vif,关于计算机二级( VIF ) 县城有高手吗? 急寻

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼自考《管理系统中计算机应用》上机实践考试样卷2007年08月09日 13:29(本卷考试时间60分钟)注意事项&#xff1a;1、在考核盘的根目录下有XS.DBF、CJ.DBF、STD.DBF、LOAN.DBF、DISREC.SCX、TTT.PRG、KSH.PRG和KSHF.SCX文件&#xff…

Eclipse新建java类的时候,自动创建注释

为形成个人的java代码风格,我们在项目组中进行开发的时候&#xff0c;可以对自己的代码进行一些格式上面的设置&#xff0c;具体如下&#xff1a; 方法一&#xff1a;Eclipse中设置在创建新类时自动生成注释 windows–>preference Java–>Code Style–>Code Templates…

无论是否使用Spring Framework,为什么我们会失败?

在Twitter领域再次引起了一些反感 &#xff0c;我看到了Sam Atkinson的博客帖子&#xff0c;题为“ 为什么我讨厌Spring” 。 这篇博客文章的撰写早于2014年&#xff0c;但是DZone后来才真正选择并发布了它。 实际上&#xff0c;在撰写本文时&#xff0c;Atkinson是一名开发人员…

endnote能自动翻译吗_自动挡和手自一体有啥区别?从外表能看出一辆车是哪种变速箱吗?...

汽车分自动挡和手动挡&#xff0c;手动挡就是一个手动变速箱&#xff0c;很好理解。但自动挡变速箱有很多种&#xff0c;前几日有人问了这么几个问题&#xff0c;没来得及回复&#xff0c;现在超时不能单独回复了&#xff0c;在此详细说一下&#xff0c;因为这是一个非常基础且…

html5平板电脑,Html5添加支持桌面、移动触摸手机和平板电脑的Lightbox插件教程

一、使用方法首先在标签之前或标签中引入jquery和swipebox js文件。在标签中引入swipebox.css文件。二、Html结构三、调用插件;( function( $ ) {$( .swipebox ).swipebox();} )( jQuery );四、高级配置(1)画廊(2)视频支持My Videos(3)动态调用画廊$( #gallery ).click( functi…

idea 内存溢出解决方法

在Run/Debug configuration 的 vm options里面输入 -server -XX:PermSize128M -XX:MaxPermSize256m 具体如下图&#xff1a; 转载于:https://www.cnblogs.com/Liang-Haishan216/p/7044028.html

网页设计html加音频,HTML5网页中如何嵌入音频,视频?

《HTML5的视频播放控制技术》 介绍了本文主要介绍在HTML5 中如何嵌入音频&#xff0c;视频&#xff1f;在HTML5 中如何嵌入音频&#xff1f;HTML5 支持 MP3、Wav 和 Ogg 格式的音频&#xff0c;代码示例&#xff1a;Your browser does’nt support audio embedding feature.HTM…

seo 伪原创_胡子哥谈seo优化:那些不被了解的伪原创技巧

各位小伙伴们好&#xff0c;我是没有胡子的胡子哥&#xff0c;玩转SEO多年的老互联网人。(胡子哥推出包上首页服务&#xff0c;无效退款&#xff0c;有技术就是敢承诺&#xff01;)做SEO优化的人都知道&#xff0c;一个网站提升权重的过程中&#xff0c;文章的原创度占比是很高…

javafx2_JavaFX 2 GameTutorial第3部分

javafx2介绍 Ť他是与一个六个部分组成的系列的第3部分的JavaFX 2游戏教程。 如果您错过了第1部分和第2部分 &#xff0c;我建议您在开始本教程之前仔细阅读它们。 回顾第2部分&#xff0c;我讨论了游戏循环的内部工作原理&#xff0c;其中我们使用动画&#xff08;JavaFX Time…

03_字体标记

12321321转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7044136.html

dw中html中无法使用js,在Dreamweaver中调用JavaScript行为

调用JavaScript行为可以指定在事件发生时要执行的自定义函数或者JavaScript代码。可以自己书写这些JavaScript代码&#xff0c;也可以使用网络上免费发布的各种JavaScript库。一、Dreamweaver调用JavaScript行为1. 选择一个对象。2. 打开行为面板。3. 点击“添加行为()”按钮&a…

python 渗透框架_Python渗透测试框架:PytheM

PytheM是一个Python渗透测试框架。它只能在osnGNU/Linux OS系统上运行。安装$sudo apt-get update$sudo apt-get install libasound-dev libjack-jackd2-dev portaudio19-dev python-pyaudio build-essential python-dev libnetfilter-queue-dev libespeak1 libffi-dev libssl-…

javaweb可部署目录结构

webApp //项目名称 -META-INF --MANIFEST.MF -WEB-INF --classes //编译class文件 --lib //依赖jar --web.xml -index.jsp //首页转载于:https://www.cnblogs.com/chenweichu/p/7044925.html

带有JBoss工具的OpenShift 3上的Java EE 7应用程序

您可以使用最新版本的JBoss Tools OpenShift插件在Eclipse中创建和管理OpenShift应用程序。 他们要么预先捆绑了最新的 JBoss Developer Studio&#xff08;9.0.0.GA&#xff09; &#xff0c;也可以将它们安装到现有的Eclipse Mars中。 这篇文章将引导您通过JBoss Developer …

上海交大计算机学院奖学金,上海交通大学-电子信息与电气工程学院-学生工作办公室...

各位同学&#xff1a;由于中船奖学金申请人数不够&#xff0c;故申报截止时间推迟到3月23日17&#xff1a;00。公示时间推迟到3月26日-3月28日17&#xff1a;00。请仍想申请本奖学金的同学于3月23日17&#xff1a;00前将材料交至指定地点&#xff0c;特此通知。电院学生办2018年…

自动检测技术学习心得体会_国培计划(2020)—学校管理团队信息化领导力提升培训心得体会...

点击蓝字关注我吧国培计划(2020)—学校管理团队信息化领导力提升培训心得体会2020年10月28日&#xff0c;由裕安区教师进修学校承担的2020年“国培计划(2020)- 学校管理者信息化领导力培训项目在全体学员的期待下正式拉开序幕。精心设计的培训课程精彩纷呈的课堂培训的内容和我…

重装mysql出现无法start service的问题

could not start the service MySQL .error 0 安装时无法启动服务 在MySQL数据库卸载后重装时&#xff0c;一定要将MySQL的相关服务&#xff0c;文件夹&#xff0c;注册表删除彻底 重装前的步骤&#xff1a; 1.打开service.msc关闭MySQL服务 2.控制面板 -> 程序和功能 -…

安宁计算机学院,滁州学院张燕咏、安宁两位教授应邀来我院指导工作

应计算机与信息工程学院邀请&#xff0c;美国罗格斯大学张燕咏教授、合肥工业大学安宁教授于6月9、10日两天来我院进行学术交流和实验室建设方案讨论。6月9日上午&#xff0c;信息学院刘进军、姚光顺两位教师向两位教授汇报了信息学院的实验室建设思路、特别是物联网专业实验室…

六元均匀直线阵的各元间距为_给棉花地选购滴灌带时记住这几点,不再为棉花滴水时发愁...

现在马上进入棉花大量采收阶段&#xff0c;好多农户已经把棉花地里的90管拆了拉回来了&#xff0c;而且不少滴灌带生产厂家也主动和农户联系2021年的滴灌带兑换事项&#xff0c;农户们也在相互打听哪家的质量好、价格合适。选择滴灌带是棉花生产过程中较为重要的环节&#xff0…