今日的北京氣溫回升,昨天是降溫。天氣的變暖,讓大家感覺(jué)十分溫暖,課上睡意連綿。湯兄弟有發(fā)現(xiàn)大家的狀況,所以今天拿出了一點(diǎn)時(shí)間與大家交流學(xué)習(xí)方法或技術(shù)上的一些問(wèn)題。授課進(jìn)度完全在掌握之中。
?
未來(lái)三天的內(nèi)容,學(xué)習(xí)使用 JBMP 解決 審批流轉(zhuǎn)這一大模塊的需求。今日的課程內(nèi)容比較簡(jiǎn)單,但在實(shí)際項(xiàng)目中的應(yīng)用卻十分重要。把 WEB 基礎(chǔ)搞的差不多了,這些框架并沒(méi)什么難的。更多的是應(yīng)該多使用,多熟悉他們。兩大重點(diǎn)內(nèi)容:通用超強(qiáng)分頁(yè)功能、 JBPM 審批流程管理。
?
一、通用超強(qiáng)分頁(yè)功能
1. 分頁(yè)效果
(圖 1.1 )
圖 1.1 中顯示的分頁(yè)功能是目前我見(jiàn)到的,功用最全的分頁(yè)功能。當(dāng)然也是論壇中比較常用的分頁(yè)功能。我們今日就實(shí)現(xiàn)這個(gè)通用超級(jí)分頁(yè)功能。
?
2. 分頁(yè) Bean
湯老師使用自己的講課風(fēng)格(應(yīng)該也是他做項(xiàng)目時(shí)的編寫(xiě)風(fēng)格),由廣入微、由粗糙到細(xì)致。使用他的方法做分析比較好,這或許是通用的分析方式吧!
?
我們看圖 1.1 中具有的屬性:
v 頁(yè)碼: 1/11 頁(yè)
v 每頁(yè)顯示: 30 條
v 總記錄數(shù): 301 條
v 分頁(yè): [ 首頁(yè) ] [ 上一頁(yè) ] [ 下一頁(yè) ] [ 尾頁(yè) ] 1 2 3 4 5 6 7 8 9 10
?
OK ,我們根據(jù)頁(yè)面信息取出了分頁(yè) Bean 的屬性,并設(shè)計(jì)分頁(yè) Bean :
import java.util.List; ? public ? class PageView { // 通過(guò)參數(shù)指定的信息 private ? int ? currentPage ; // 當(dāng)前頁(yè)碼 private ? int ? pageSzie ; // 每頁(yè)顯示記錄數(shù)量 // 通過(guò)查詢數(shù)據(jù)庫(kù)獲取的信息,外部獲取 private ? int ? recordTotal ; // 總記錄數(shù) private ? List ? recordList ; // 當(dāng)前面記錄信息列表 // 通過(guò)計(jì)算生成的信息 private ? int ? pageTotal ; // 總頁(yè)面數(shù)量 private ? int ? startIndex ; // 起始頁(yè)面索引 private ? int ? endIndex ; // 結(jié)束頁(yè)面索引 // 顯示的頁(yè)面數(shù)量 private ? static ? final ? int ? PAGE_INDEX_COUNT = 10; ? // 在構(gòu)造方法中生成各種需要的信息 public PageView( int currentPage, int pageSize, int recordTotal, List recordList) { this . currentPage = currentPage; this . pageSzie = pageSize; this . recordTotal = recordTotal; this . recordList = recordList; // 通過(guò)計(jì)算生成startIndex和endIndex /* * 因?yàn)轱@示的頁(yè)面索引數(shù)量是有限的 我們不能把所以的頁(yè)面索引一下子全列出來(lái) 我們需要?jiǎng)討B(tài)顯示頁(yè)面索引列表 */ this . pageTotal = ( this . recordTotal + this . pageSzie - 1) / this . pageSzie ; // 如果頁(yè)面總數(shù)<=顯示頁(yè)面索引數(shù)量 if ( this . pageTotal <= PAGE_INDEX_COUNT ) { this . startIndex = 1; this . endIndex = this . pageTotal ; } else { // 根據(jù)當(dāng)前頁(yè)面索引生成,頁(yè)面起始索引和結(jié)束索引。 // 區(qū)分偶數(shù)和奇數(shù) 頁(yè)面索引數(shù)量 if ( PAGE_INDEX_COUNT % 2 == 0) { this . startIndex = this . currentPage - ( PAGE_INDEX_COUNT / 2 - 1); this . endIndex = this . currentPage + ( PAGE_INDEX_COUNT / 2); } else { this . startIndex = this . currentPage - ( PAGE_INDEX_COUNT / 2); this . endIndex = this . currentPage + ( PAGE_INDEX_COUNT / 2); } // 如果生成的起始索引小于1 if ( this . startIndex < 1){ this . startIndex = 1; this . endIndex = PAGE_INDEX_COUNT ; } // 如果生成的結(jié)束索引大于總頁(yè)面索引數(shù)量 if ( this . endIndex > this . pageTotal ){ this . endIndex = this . pageTotal ; this . startIndex = this . pageTotal - PAGE_INDEX_COUNT ; } } } // ...getters AND setters } |
?
3. 審批流程的 DispathcAction
我們與上次課程一樣,需要為審批流程編寫(xiě)一個(gè) DispatchAction 。涉及到顯示審批流程列表只有一個(gè)方法—— list :
/** ? ? * ? 顯示審批流程列表 ? ? */ public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { int pageNum = Integer. parseInt (request.getParameter( "pageNum" )); // 調(diào)用ProcessDefinitionService接口的getPageView方法獲取PageView對(duì)象 PageView pageView = processDefinitionService .getPageView(pageNum); // 將PageView對(duì)象存放到request的pageView屬性中 request.setAttribute( "pageView" , pageView); return mapping.findForward( "list" ); // list. jsp } |
?
其中用到的“ processDefinitionService .getPageView ”方法:
/** ? * ? 獲取pageView信息 ? */ public PageView getPageView( int pageNum) { // 每面顯示10條記錄 int pageSize = 10; // 查詢數(shù)據(jù)庫(kù) // 使用Number防止不同數(shù)據(jù)庫(kù)返回的數(shù)值類型不同,而引發(fā)的異常。 int count = ((Number) this .getSession().createQuery( "SELECT COUNT(*) FROM " + ProcessDefinition. class .getName() + " pd" ).uniqueResult()).intValue(); // 第一條記錄的索引 int firstRecoderIndex = (pageNum - 1) * pageSize; // 獲取記錄列表 List list = this .getSession().createQuery( "FROM " + ProcessDefinition. class .getName() + " pd" ) .setFirstResult(firstRecoderIndex).setMaxResults(pageSize) .list(); return ? new PageView(pageNum, pageSize, count, list); } |
?
4. 顯示分頁(yè)信息的 pageView.jspf 頁(yè)面
多處使用到分頁(yè)頁(yè)面,所以我們將分頁(yè)頁(yè)面單獨(dú)提取出來(lái)。如果有哪個(gè)頁(yè)面需要顯示分頁(yè)信息,直接 include 就可以了。
<%@ ? page ? language = "java" ? pageEncoding = "utf-8" ? %> <%@ ? taglib ? prefix = "c" ? uri = "http://java.sun.com/jsp/jstl/core" ? %> ? < c:if ? test = " ${pageView.totalPage gt 1 } " > ? <!-- 分頁(yè)信息 --> 頁(yè)碼:${pageView.currentPage}/${pageView.totalPage}頁(yè) 每頁(yè)顯示:${pageView.pageSize}條 總記錄數(shù):${pageView.recordCount}條 ? 分頁(yè): < a ? href = "javascript:gotoPage(1)" > [首頁(yè)] </ a > ? < c:if ? test = " ${pageView.currentPage gt 1} " > < a ? href = " javascript:gotoPage( ${pageView.currentPage - 1} ) " > [上一頁(yè)] </ a > ? </ c:if > < c:if ? test = " ${pageView.currentPage lt pageView.totalPage} " > < a ? href = " javascript:gotoPage( ${pageView.currentPage + 1} ) " > [下一頁(yè)] </ a > ? </ c:if > <span style="font-family: 'Cour |
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
