在上一個(gè)介紹里面主要講到了分頁標(biāo)簽的配置,邏輯處理,引用。
我們?cè)赼ction中:



然后在JSP中引用此page。
這次主要看如何能過對(duì)DB操作實(shí)現(xiàn)此page。
處理邏輯:
1:根據(jù)SQL語句,當(dāng)前頁面,頁面大小等參數(shù),得到一系統(tǒng)data。
2:根據(jù)得到的data,再加上當(dāng)前頁面,頁面大小可以實(shí)例化一個(gè)page類實(shí)體。
3:將此實(shí)體轉(zhuǎn)換成便于到前臺(tái)顯示的DTO。
具體如下:
首先,我們根據(jù)查詢語句從DB中得到一系列相關(guān)數(shù)據(jù)
......
Query?query?=?getSession().createQuery(sql);
????????????setParams(query,?paramNames,?params);

????????????if?(pageSize?>?-1)?
{
????????????????query.setFirstResult(PageManager.getStartIndex(pageNumber,
????????????????????????totalCount,?pageSize));
????????????????query.setMaxResults(pageSize);
????????????}
????????????List?data?=?doQuery(query);
????????????

????????????if?(pageSize?<?0)?
{
????????????????totalCount?=?data.size();
????????????}
......
















......
可以看到其中除了createQuery,setFirstResult,setMaxResults外其實(shí)都是用戶自定義的一些函數(shù)。
其它函數(shù),顧名思義應(yīng)該知道它想實(shí)現(xiàn)一個(gè)什么功能,象doQuery(query)就是得到一個(gè)結(jié)果集也許是得到一個(gè)按列表方式抽取結(jié)果集?query.list(),or 按迭代方式抽取結(jié)果集query.iterate().函數(shù)getStartIndex(args[])返回?cái)?shù)據(jù)第一條記錄的起點(diǎn)位置。其它的也都差不多!
其次得到一個(gè)page的實(shí)體類(entity),或者說得到其DAO對(duì)象。
其實(shí)得到一個(gè)DTO的page對(duì)象比較簡單。前面列出了page,而上面已經(jīng)從DB中得到了一系列數(shù)據(jù)(data),再加上頁面的相關(guān)信息就可以實(shí)例化一個(gè)page實(shí)體了:
















當(dāng)然在此前,對(duì)面頁數(shù)據(jù)得處理一下,象pageNumber可能如下:



















easy吧!
最后將此實(shí)體轉(zhuǎn)換成適合前臺(tái)顯示的DTO對(duì)象。
這個(gè)側(cè)是依據(jù)不同的需求去做相應(yīng)的轉(zhuǎn)換了,一般來說從DB取出來的實(shí)體(DAO)直接與DB中的數(shù)據(jù)對(duì)應(yīng)。而在DTO中我們可以提供許多更加符合實(shí)際的字段與方法,使得我們的JSP頁面顯示更加得心應(yīng)手!同時(shí)也避免了直與DB交互。它們之間的關(guān)系, 我亂七八糟寫過些東西(歡迎指正!)。
“一般人的標(biāo)簽我不看,高手寫的東西真的值得借鑒,學(xué)習(xí)!”