`

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

阅读更多

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

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

相关推荐

    一个封装好的分页控件

    标题中的“一个封装好的分页控件”指的是在软件开发中用于处理大量数据展示的UI组件,这种控件能够将大量的记录分割成多个小部分,每次只加载一部分数据到界面上,提高用户浏览效率和应用性能。在.NET环境中,这样的...

    两个版本Mysql和Oracle的分页标签

    分页标签通常是一个自定义标签库,可以接受页码、每页记录数等参数,并返回相应的查询结果。这种方式提高了代码的可读性和可维护性。 总的来说,MySQL和Oracle都提供了有效的分页解决方案,但它们的语法略有不同。...

    struts2.0标签库简介

    Struts2.0是Struts框架的一个重大升级版本,它在继承了Struts1.x的优良特性基础上,引入了大量的新功能和改进,特别是在标签库方面,提供了更为强大、灵活和易于使用的标签集,大大简化了Web应用的开发过程。...

    el-table,el-form在vue中封装组件化,含操作按钮和插槽.pdf

    `searchList`应该是一个包含各种表单字段配置的对象数组,包括类型(type)、标签(label)、属性(prop)、宽度(labelWidth)等信息。根据字段类型,可以创建不同类型的输入控件,如`el-input`、`el-date-picker`...

    reportlab分页

    1. **PageBreak**: 在ReportLab中,`PageBreak`对象被用来插入一个新的页面。当你想要在某个特定点结束当前页面并开始新的一页时,可以使用它。例如: ```python from reportlab.pdfgen import canvas from ...

    magento分页排序插件

    Magento默认的分页功能已经相当完善,但该插件可能提供了更高级的定制选项,如自定义每页显示的商品数量、动态加载(懒加载)以减少页面加载时间,以及更美观的分页样式,这些都可以提高用户的浏览效率和满意度。...

    支持cad2016的多页面标签软件.zip

    DuoTab的出现,打破了一直以来在AutoCAD中单窗口单图纸的限制,引入了类似于现代浏览器中标签页的概念,允许用户在一个统一的界面下同时打开和管理多个图纸。这样一来,用户可以在查看和编辑不同图纸之间快速切换,...

    mybatis-3.2.7.zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    自绘制PageControl和TabControl

    - PageControl通常包含多个TabPages,每个TabPage相当于一个独立的界面。 - 分页切换:处理WM_NOTIFY消息,响应TCN_SELCHANGE通知,更新当前显示的页面。 - 自定义分页样式:调整分页按钮的外观,例如使用圆角...

    eXtremeComponents-1.0.4.zip

    eXtremeComponents 是一个功能强大的组件库,尤其以其在JSP中的extremetable标签而闻名,它提供了一种类似于displaytag的便捷方式来处理表格展示,极大地提高了开发效率和用户体验。本文将深入探讨eXtremeComponents...

    易想最新升级包V4.0

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

    django-docs-2.2-zh-hans.zip

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

    wordpress滑动图相册插件ml-slider.zip

    **WordPress滑动图相册插件ML...无论你是希望提升网站视觉吸引力,还是需要一个高效展示产品或内容的工具,ML-Slider都是一个值得信赖的选择。在实际使用中,请确保自行测试以熟悉各项设置,以充分利用这款插件的优势。

    八股文知识点汇总-各互联网大厂java工程师面试题.pdf

    MyBatis 是一个基于 Java 的持久层框架,它简化了对数据库的操作,通过 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 2. **MyBatis...

    互联网创意产品众筹平台

    │ 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 ├─众筹项目-第...

    mybatis-3.2.2 jar包

    例如,可以创建一个PageInterceptor插件实现分页功能。 6. **事务管理**:MyBatis支持手动和自动事务管理。在Spring集成中,通常会使用Spring的事务管理,但在简单的应用中,MyBatis也可以独立处理事务。 7. **...

    Firefox火狐浏览器官方78.0b8-win32版本exe安装包

    同时,Firefox还支持分页浏览,允许用户在一个窗口内打开多个网页,便于多任务处理。 总的来说,Firefox 78.0b8-win32版本提供了一流的浏览体验,无论是对于普通用户还是高级用户,都是一款值得信赖的浏览器。它的...

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

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

    MFC Tab标签页控件 CTabSheet

    在MFC中,`CTabSheet`类是用于实现Tab控件的一个关键组件,它允许你在同一个窗口内创建多个分页,每个分页可以展示不同的内容。`CTabSheet`是`CPropertySheet`类的一部分,常用于创建多页对话框式的应用程序。 标题...

Global site tag (gtag.js) - Google Analytics