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.pswp.cn/news/372394.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372394.shtml
英文地址,請注明出處:http://en.pswp.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