JAVA

人生若只如初见,何事秋风悲画扇。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  50 随笔 :: 25 文章 :: 157 评论 :: 0 Trackbacks

上一个介绍里面主要讲到了分页标签的配置,逻辑处理,引用。
我们在action中:

// 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取出来的实体(DAO)直接与DB中的数据对应。而在DTO中我们可以提供许多更加符合实际的字段与方法,使得我们的JSP页面显示更加得心应手!同时也避免了直与DB交互。它们之间的关系,
我乱七八糟写过些东西(欢迎指正!

“一般人的标签我不看,高手写的东西真的值得借鉴,学习!”
posted on 2006-03-17 23:44 Jkallen 阅读(2576) 评论(2)  编辑  收藏 所属分类: JEE学习其它开源

评论

# re: 一个相当好的自定义标签---分页(二) 2006-06-13 12:02 Fraser
能不能给提供一下源码下载  回复  更多评论
  

# re: 一个相当好的自定义标签---分页(二) 2007-12-31 01:44 zhoudq
能发份我嘛,谢谢。
zhdqCN@gmail.com  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: