頁面代碼非常簡單,沒有復雜性。 檢查“ index.xhtml”代碼:
<!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:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body><f:view><h:form><p:dataTable id="lazyDataTable" value="#{playerMB.allPlayers}" var="player" paginator="true" rows="10"selection="#{playerMB.player}" selectionMode="single"paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"rowsPerPageTemplate="5,10,15" style="width: 80%;margin-left: 10%;margin-right: 10%;"><p:ajax event="rowSelect" update=":playerDialogForm" oncomplete="playerDetails.show()" /><p:column><f:facet name="header">Name</f:facet><h:outputText value="#{player.name}" /></p:column><p:column><f:facet name="header">Age</f:facet><h:outputText value="#{player.age}" /></p:column></p:dataTable></h:form><p:dialog widgetVar="playerDetails" header="Player" modal="true"><h:form id="playerDialogForm"><h:panelGrid columns="2"><h:outputText value="Id: " /><h:outputText value="#{playerMB.player.id}" /><h:outputText value="Name: " /><h:outputText value="#{playerMB.player.name}" /><h:outputText value="Age: " /><h:outputText value="#{playerMB.player.age}" /></h:panelGrid></h:form></p:dialog></f:view>
</h:body>
</html>
我們得到了一個懶惰的數據表,它將在對話框中顯示選定的值。
在我們的Managed Bean中,我們有比頁面更簡單的代碼:
package com.mb;import java.io.Serializable;import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;import org.primefaces.model.LazyDataModel;import com.model.Player;@ViewScoped
@ManagedBean
public class PlayerMB implements Serializable {private static final long serialVersionUID = 1L;private LazyDataModel<Player> players = null;private Player player;public LazyDataModel<Player> getAllPlayers() {if (players == null) {players = new PlayerLazyList();}return players;}public Player getPlayer() {if(player == null){player = new Player();}return player;}public void setPlayer(Player player) {this.player = player;}
}
我們對播放器實體進行了獲取/設置,對LazyDataModel類型的對象進行了獲取。
在下面檢查PlayerLazyList代碼的實現
package com.mb;import java.util.List;
import java.util.Map;import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;import com.connection.MyTransaction;
import com.dao.PlayerDAO;
import com.model.Player;public class PlayerLazyList extends LazyDataModel<Player> {private static final long serialVersionUID = 1L;private List<Player> players;private MyTransaction transaction;private PlayerDAO playerDAO;@Overridepublic List<Player> load(int startingAt, int maxPerPage, String sortField, SortOrder sortOrder, Map<String, String> filters) {try {try {transaction = MyTransaction.getNewTransaction();playerDAO = new PlayerDAO(transaction);transaction.begin();// with datatable pagination limitsplayers = playerDAO.findPlayers(startingAt, maxPerPage);// If there is no player created yet, we will create 100!!if (players == null || players.isEmpty()) {playerDAO.create100Players();// we will do the research again to get the created playersplayers = playerDAO.findPlayers(startingAt, maxPerPage);}} finally {transaction.commit();}} catch (Exception e) {e.printStackTrace();}// set the total of playersif(getRowCount() <= 0){setRowCount(playerDAO.countPlayersTotal());}// set the page dizesetPageSize(maxPerPage);return players;}@Overridepublic Object getRowKey(Player player) {return player.getId();}@Overridepublic Player getRowData(String playerId) {Integer id = Integer.valueOf(playerId);for (Player player : players) {if(id.equals(player.getId())){return player;}}return null;}
}
關于上面的代碼:
- 加載方法:每次啟動分頁時,Primefaces都會調用此方法。 它將具有有效值的所有參數; 使用這些參數,您將能夠在數據庫中進行查詢,僅獲取所需的數據。 如果要按字段對查詢排序,則可以使用sortField屬性,該屬性將具有列datatable值(如果用戶不進行排序,則為null); sortOrder將指示用戶是否要遞增或遞減。
- getRowKey方法:此方法向每行返回一個ID,Primefaces將在需要時調用此方法。
- getRowData方法:將在數據表中返回選定的Player。
- 首次運行此應用程序時,它將在數據庫中保留100個播放器。 在實際應用中,這不是必需的。
最后一個配置需要添加到“ web.xml”文件中:
<persistence-context-ref><persistence-context-ref-name>JSFPU</persistence-context-ref-name><persistence-unit-name>JSFPU</persistence-unit-name>
</persistence-context-ref>
我們將使用此配置來執行JNDI查找。
運行我們的應用程序
現在我們只需要啟動應用程序。
要訪問該應用程序,您可以使用鏈接:
http:// localhost:8080 / DatatableLazyPrimefaces /


單擊此處下載此帖子的源代碼。
參考: uaiHebert博客上我們JCG合作伙伴 Hebert Coelho的懶惰JSF數據表分頁(Primefaces) 。
翻譯自: https://www.javacodegeeks.com/2012/04/lazy-jsf-primefaces-datatable_11.html