`

一个相当好的自定义标签---分页(二)

阅读更多

上一个介绍里面主要讲到了分页标签的配置,逻辑处理,引用。
我们在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交互。它们之间的关系,
我乱七八糟写过些东西(欢迎指正!

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

相关推荐

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());...

    django-docs-2.2-zh-hans.zip

    针对程序员: 模板 API | 自定义标签(tags)和过滤器(filters) 表单 Django 提供了一个丰富的框架来帮助创建表单和处理表单数据。 基础: 概览 | 表单 API | 内建字段 | 内建 widgets 进阶: 针对模型的表单 | 整合媒体...

    易想最新升级包V4.0

    YxB2B商务网是易想网络旗下的门户型B2B行业网站系统,采用先进的标签技术和静态生成技术,通过网站后台管理轻松实现网站前台多种风格和会员网站多风格,让每一个只要懂得简单网页制作常识的网友,轻松制作出精美专业...

    互联网创意产品众筹平台

    │ 13-zTree树形结构-Demo4-一次加载数据,避免多次数据库交互,提高效率7 M) d& `5 L5 T2 d7 R$ s │ 14-zTree树形结构-Demo5-一次加载数据,Map集合解决双层for性能问题 │ 0 D% f8 ?. j2 W( U' z, e ├─众筹项目-第...

    ExtAspNet_v2.3.2_dll

    -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());...

    Google Chrome 6.0.451.0 Dev 版(一个由Google公司开发的网页浏览器)

     Chrome中的每一个标签页都是一个沙盒(sandbox),以防止“恶意软件破坏用户系统”或“利用分页影响其他分页”。遵守最小权限原则,每个动作的权限都会被限制,仅能运算而无法写入文件和从敏感区域读取文件(如我...

    BookingE HotelCMS 预订易酒店预订网站管理系统 v2.3.rar

    一个城市少则几十家,多则几百家酒店,每家酒店的每间客房都相当于我们的一个产品。我们不需要一分钱投资,但可以无限销售。这只有酒店预订业才有的特殊待遇。 3、解决网络支付的顾虑问题 国内95%以上的酒店都支持...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    JAVA上百实例源码以及开源项目源代码

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    OElove_v3.0

    5、增加会员主页上一个、下一个标签; 6、修复后台求助分类权限无效BUG; 7、修复心理测试评论无法分页BUG; 8、后台增加消息框风格; 9、修复会员主页,择友要求,交友类型无法显示BUG; 10、后台增加内心独白审核...

    GoodProject Maven Webapp.zip

    该项目分了两个系统,一个用户登录的系统,一个管理员登录的系统,可以更好的进行管理 功能技术亮点:4,支付宝扫码支付 角色:商户 商品发码 1.商户通过自助签约平台签约扫码产品后,可以通过发码平台自助发商品...

Global site tag (gtag.js) - Google Analytics