在上一个介绍里面主要讲到了分页标签的配置,逻辑处理,引用。
我们在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交互。它们之间的关系,
我乱七八糟写过些东西(欢迎指正!)。
“一般人的标签我不看,高手写的东西真的值得借鉴,学习!”