在上一個介紹里面主要講到了分頁標簽的配置,邏輯處理,引用。
我們在action中:
//
JSP中引用此attribute分頁處理
request.setAttribute(
"
page
"
,page);
然后在JSP中引用此page。
這次主要看如何能過對DB操作實現此page。
處理邏輯:
1:根據SQL語句,當前頁面,頁面大小等參數,得到一系統data。
2:根據得到的data,再加上當前頁面,頁面大小可以實例化一個page類實體。
3:將此實體轉換成便于到前臺顯示的DTO。
具體如下:
首先,我們根據查詢語句從DB中得到一系列相關數據
可以看到其中除了createQuery,setFirstResult,setMaxResults外其實都是用戶自定義的一些函數。
其它函數,顧名思義應該知道它想實現一個什么功能,象doQuery(query)就是得到一個結果集也許是得到一個按列表方式抽取結果集?query.list(),or 按迭代方式抽取結果集query.iterate().函數getStartIndex(args[])返回數據第一條記錄的起點位置。其它的也都差不多!
其次得到一個page的實體類(entity),或者說得到其DAO對象。
其實得到一個DTO的page對象比較簡單。前面列出了page,而上面已經從DB中得到了一系列數據(data),再加上頁面的相關信息就可以實例化一個page實體了:
.

public
?DefaultPage(
int
?pageSize,?
int
?pagesCount,?
int
?pageNumber,?Collection?data,

?????????????????????
int
?totalSize)?
{
????
this
.pageSize?
=
?pageSize;
????
this
.pagesCount?
=
?pagesCount;
????
this
.pageNumber?
=
?pageNumber;
????
this
.totalSize?
=
?totalSize;
????
this
.data?
=
?data;
??}
.
當然在此前,對面頁數據得處理一下,象pageNumber可能如下:
/**?*/
/**
?????*?
@param
?pageNumber
?????*?
@param
?pageSize
?????*?
@param
?totalCount
?????*?Return?PageNumber
?????
*/
????
protected
?
static
?
int
?calcPageNumber(
int
?pageNumber,?
int
?pageSize,?
int
?totalCount)?
{
????????
int
?maxPageNumber?
=
?calcMaxPageNumber(pageSize,?totalCount);
????????
????????pageNumber?
=
?pageNumber
>
maxPageNumber
?
maxPageNumber:pageNumber;
????????
????????
if
(pageNumber
<=
0
)
????????????pageNumber
=
1
;
????????
????????
return
?pageNumber;
????}
easy吧!
最后將此實體轉換成適合前臺顯示的DTO對象。
這個側是依據不同的需求去做相應的轉換了,一般來說從DB取出來的實體(DAO)直接與DB中的數據對應。而在DTO中我們可以提供許多更加符合實際的字段與方法,使得我們的JSP頁面顯示更加得心應手!同時也避免了直與DB交互。它們之間的關系,
我亂七八糟寫過些東西(歡迎指正!)。
“一般人的標簽我不看,高手寫的東西真的值得借鑒,學習!”