读书人

一个对等好的自定义标签-分页(二)

发布时间: 2012-12-24 10:43:14 作者: rapoo

一个相当好的自定义标签---分页(二)
// JSP中引用此attribute分页处理
一个对等好的自定义标签-分页(二)
一个对等好的自定义标签-分页(二)request.setAttribute( " page " ,page);
然后在JSP中引用此page。
这次主要看如何能过对DB操作实现此page。

处理逻辑:
1:根据SQL语句,当前页面,页面大小等参数,得到一系统data。
2:根据得到的data,再加上当前页面,页面大小可以实例化一个page类实体。
3:将此实体转换成便于到前台显示的DTO。

具体如下:

首先,我们根据查询语句从DB中得到一系列相关数据

......

一个对等好的自定义标签-分页(二)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外其实都是用户自定义的一些函数。
其它函数,顾名思义应该知道它想实现一个什么功能,象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取出来的实体—AO)直接与DB中的数据对应。而在DTO中我们可以提供许多更加符合实际的字段与方法,使得我们的JSP页面显示更加得心应手!同时也避免了直与DB交互。它们之间的关系, 我乱七八糟写过些东西(欢迎指正!)。

“一般人的标签我不看,高手写的东西真的值得借鉴,学习!”

读书人网 >编程

热点推荐