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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時間:2023/12/3 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 primefaces_懒惰的JSF Primefaces数据表分页–第1部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

primefaces

今天,我們將使用帶有視圖范圍的托管bean的惰性列表進行JSF數(shù)據(jù)表分頁。 這些單詞/表達是什么意思?

如今,有幾個JSF框架可為數(shù)據(jù)表提供現(xiàn)成的分頁,列排序器和其他功能。 今天,我們將使用Primefaces數(shù)據(jù)表。

通常,數(shù)據(jù)表會將顯示的列表以及實體放入用戶http會話中。 增加用戶會話中的對象將直接影響服務器性能。 每個顯示數(shù)據(jù)表并在會話中保留列表的用戶都將在服務器中分配越來越多的內(nèi)存。

為了看起來真實,我們的帖子將使用JPA和HSQLDB作為數(shù)據(jù)庫,并且將使用JPQL查詢數(shù)據(jù)。

在本文的結尾,您將找到下載源代碼的鏈接。

我們將使用:

  • JSF 2.0 – JBoss 7實施
  • JBoss 7.1 –本文的代碼應適用于所有服務器
  • Eclipse靛藍
  • JPA 2.0 – JBoss 7實施
  • HSQLDB(2.2.8)– HSQL是一個內(nèi)存數(shù)據(jù)庫,它將更易于運行。
  • Primefaces 3.2

這篇文章不是關于好的開發(fā)實踐,也不是關于添加項目建模的類層。 我只是想展示如何在沒有會話托管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”文件夾中創(chuàng)建一個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>

為了抽象數(shù)據(jù)庫事務,我們將使用一個名為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();} }

您可以在上面的代碼中看到,該類只是數(shù)據(jù)庫連接的抽象; 它將幫助我們進行數(shù)據(jù)庫查詢。 您可以使用任何類型的連接,甚至可以使用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上下文之外調(diào)用的Primefaces調(diào)用,如果嘗試訪問應注入的引用,則可能會收到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種方法可用于分頁。 注意,沒有方法可以列出數(shù)據(jù)庫中的所有玩家。

創(chuàng)建文件夾“ YOU_JBOSS / modules / org / hsqldb / main”。 在此文件夾中,創(chuàng)建一個名為“ 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”文件復制到剛創(chuàng)建的文件夾“ main”中。 您可以在下載的HSQLDB jar內(nèi)找到該文件,路徑為“ hsqldb-2.2.8.zip/hsqldb-2.2.8/hsqldb/lib”。

編輯文件“ YOU_JBOSS / standalone / configuration / standalone.xml”,然后在“數(shù)據(jù)源”節(jié)點中添加以下代碼:

<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>

在驅動程序節(jié)點中添加:

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

參考: uaiHebert博客上的JCG合作伙伴 Hebert Coelho的懶惰JSF數(shù)據(jù)表分頁(Primefaces) 。


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

primefaces

總結

以上是生活随笔為你收集整理的primefaces_懒惰的JSF Primefaces数据表分页–第1部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 涩涩涩av | 狠狠躁夜夜躁av无码中文幕 | 男人桶进美女尿囗 | 中国字幕av | 一区二区三区爱爱 | 亚洲色图 在线视频 | 四级黄色片| 一区二区不卡视频在线观看 | 极品少妇xxxx | 毛片免费播放 | 欧美精品一二 | 成人欧美性 | 少妇xxx | 精品亚洲一区二区三区四区五区 | 黄色片子网站 | 国产乱子伦视频一区二区三区 | 亚洲精选一区 | 久久久久久久一区二区三区 | 一对一色视频聊天a | 亚洲av片不卡无码久久 | 好吊妞视频在线 | 2021av| 99热99在线 | 亚洲三区av | 国产日本在线 | 欧洲av一区 | 欧美a久久| 亚洲国产毛片 | 国产日韩成人内射视频 | 欧美成人精品一区二区男人小说 | 日韩一二三四区 | 精品一二三区久久aaa片 | 免费视频一区二区 | 国产高清视频免费 | 三级av网| 九九九久久久精品 | 欧美亚洲另类小说 | 亚洲av永久无码精品一百度影院 | 又色又爽又黄无遮挡的免费视频 | h片网站在线观看 | 欧美美女在线 | 国产成人精品在线视频 | 色在线播放 | 欧美专区在线观看 | 天天操天天插 | 久久精品久久精品久久精品 | 私人毛片 | 亚洲品质自拍视频网站 | 51人人看 | 日韩xxx视频 | 国产毛毛片 | 又粗又大又硬又长又爽 | 色哟哟国产| 午夜免费剧场 | 四虎网站| 韩国日本在线 | 国产视频久久久久久久 | 成人a在线| 欧色丰满女同hd | 欧洲午夜视频 | 久久久777 | 日本精品网 | 体内射精一区二区 | 红桃视频成人 | 91伦理视频 | 精品黑人一区二区三区在线观看 | 天天色天天草 | 日本高清不卡在线 | av老司机在线| 91亚洲精品久久久蜜桃网站 | 色综合99久久久无码国产精品 | аⅴ资源新版在线天堂 | 久久久www成人免费无遮挡大片 | 综合一区 | 成人性生活免费看 | 黄色大片日本 | 日韩av在线看免费观看 | 色在线播放 | 国产精品爽爽久久 | 美日韩久久 | 午夜免费小视频 | 无遮挡边吃摸边吃奶边做 | 中出在线 | 一级做a在线观看 | 欧美a级黄色| 黄色性生活一级片 | 美女被c出水 | 免费黄色链接 | 成人欧美一区二区三区在线观看 | 自拍偷拍亚洲欧美 | 福利综合网 | 三级福利视频 | 欧美一区国产一区 | 日韩一级| 久久无码人妻精品一区二区三区 | 91九色porn | 免费国偷自产拍精品视频 | 成人精品视频在线播放 | 欧美少妇一级片 |