`

基于Struts2、Freemarker的分页组件实现(附工程源码)

 
阅读更多
基于Struts2、Freemarker的分页组件实现(附工程源码)
本文为原创,欢迎转载,转载请注明出处BlogJava。

本次分页组件着重于页面(Freemarker部分)、及Action部分。
至于Service及持久层处理,只是做了一个模拟的实现,实际开发中,我是应用了iBatis,封装了分页调用。
由于用法有所不同,所以就不放在源码范围内,也不在这里介绍了。
这里的分页功能只提供了 上一页、下一页、指定页 的分页,但在分页Java代码中包含了 首页、末页的实现。有需要的可自行添加。


分页的效果如图:



分页实现代码介绍:
1.pagination.ftl 分页组件 页面部分。

2.PageSupport.java 分页Action部分。

3.WebPager.java 计算分页动作。

4.Pager.java 保存分页信息,由Action传递到Service,根据Pager对象取得数据。

5.MockDataBase.java 模拟Dao,实现分页处理。


使用该组件的方法如下:

第一步:引入分页组件
<#include "/ftl/ecs/pagination.ftl" />
分页组件使用了Freemarker的宏。


第二步:在ftl文件中使用分页组件
分页组件需要输入4个参数,分别为id、method、btnCssClass、cssClass,其中id、method必须输入;btnCssClass、cssClass可选。以下是参数详细说明:
1.id : 分页组件的唯一标识。
2.method : 分页用的Action。例如:定义了Action为Pagination,则method输入 Pagination.action;若为动态方法调用,可输入Pagination!query.action
3.cssClass : 分页组件的class属性。例如cssClass="center"。
4.btnCssClass : 分页组件按钮的class属性。例如btnCssClass="btn_history"。


<@pagination id="***" btnCssClass="***" cssClass="***" method="***.action">
<table>
<tr>
<td></td>
...
</tr>
</table>
</pagination>

[编辑]第三步:继承分页类PageSupport
PageSupport.java继承自ActionSupport.java,在要分页的方法中使用PageSupport.java提供的List pageCall(String module, String target, Map dataMap)分页调用。
通过setPageSize(int pageSize)方法设定每页显示的记录数。
API详细说明:
1.pageCall

参数说明:
1) String module : 调用service的通道,例如:upf、esf。
2) String target : 要调用的service的方法,例如:com.ailk.ecs.service.TdupfPageService.selectAllUser。
3) Map dataMap : 输入参数。
返回值说明:
List : 页面显示的数据记录。

2.setPageSize

参数说明:
1) int pageSize : 每页显示记录数。

[编辑]
第四步:Service代码中使用
在service封装分页Dao或者分页方法。

pagination.ftl代码:
<#macro pagination id method cssClass="" btnCssClass="" pageSize='10'>
<div id='${id}'>
<#nested> <#-- 要刷新的区域 -->

<div class="${cssClass}">
    <input type="button" onclick="Pagination${id}.gotoPage('prev', '${webPager.pageInfo.currentPage}', '${totalSize}');" value="上一页" class="${btnCssClass}" />
    &nbsp;&nbsp;共 ${totalPages} 页&nbsp;&nbsp;第 ${webPager.pageInfo.currentPage} 页&nbsp;&nbsp;转到
    <input type="text" id='${id}_inputPageNo' name='${id}_inputPageNo' size="6"/>页 &nbsp;&nbsp;
    <input type="text" style="display:none"/>
    <input type="button" onclick="Pagination${id}.gotoPage('input', '${webPager.pageInfo.currentPage}', '${totalSize}');" value="确定" class="${btnCssClass}" />
    <input type="button" onclick="Pagination${id}.gotoPage('next', '${webPager.pageInfo.currentPage}', '${totalSize}');" value="下一页" class="${btnCssClass}" />
</div>

<script>
if (!this.Pagination${id} ) {
    this.Pagination${id} = {}

    // 分页处理方法
    Pagination${id}.gotoPage = function(action, c, t) {
        var cmd = action;

        // 当总记录数量小于等于每页记录数量时,分页动作无效
        if (t <= ${webPager.pageInfo.pageSize}) {
            return;
        }

        // 确定按钮处理
        if(action == 'input') {
            var inValue = $("#${id}_inputPageNo").val();

            if(inValue.match(/^[0-9]+$/) && parseInt(inValue) > 0) {
                cmd = inValue;
            }
            else {
                // TODO 提示错误信息
                return ;
            }
        }

        $('#${id}').load(
            '${method} #${id}',
            {action : cmd,
             totalSize : t,
             currentPage : c
            }
        );
    };
   
    // 刷新当前页面
    Pagination${id}.refreshPage = function() {
        //Pagination${id}.gotoPage('refresh');
        //scrollPage${id}('refresh', "${method}");
    };

    // 页码输入框keyup事件
    //Pagination${id}.keyup = function(inputElem, currentPage, totalSize) {
        //if (inputElem.value.match(/^[0-9]+$/) && parseInt(inputElem.value) > 0) {
            //Pagination${id}.gotoPage(inputElem.value, currentPage, totalSize);
        //}
    //};
   
    //$("#${id}_inputPageNo").keyup(function(event){
        //if(event.keyCode == 13) {
            //Pagination${id}.keyup(this, '${webPager.pageInfo.currentPage}', '${totalSize}');
        //}
    //});
}
</script>

</div>
</#macro>
分享到:
评论

相关推荐

    freemarker自定义的通用分页指令(标签)源码和使用示例

    一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx

    iBatis分页(基于Struts2和Freemarker)

    NULL 博文链接:https://sarin.iteye.com/blog/1026061

    Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面

    Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面!这是一个相对网上较全的案例。源码内含数据库文件sql.sql及效果图!本人致力于完整的Demo。欢迎关注!回头补上分页。敬请期待!

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

     基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,...

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

     基于EJB的真实世界模型,附源代码,部分功能需JSP配合完成。 J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,...

    (2.0版本)自己写的struts2+hibernate+spring实例

    beans.jar xwork-2.0.4.jar spring-context.jar ognl-2.6.11.jar spring-web.jar spring-core.jar struts2-core-2.0.11.1.jar commons-logging-1.0.4.jar freemarker-2.3.8.jar ...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包101

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    Java资源包01

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics