基于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}" />
共 ${totalPages} 页 第 ${webPager.pageInfo.currentPage} 页 转到
<input type="text" id='${id}_inputPageNo' name='${id}_inputPageNo' size="6"/>页
<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>
分享到:
相关推荐
本知识点将深入探讨如何在Struts2框架中结合iBatis实现基于Freemarker模板的分页功能。 首先,我们需要理解iBatis,它是一个轻量级的Java持久层框架,它提供了一个SQL映射框架,允许开发者将SQL语句与Java代码分离...
一个用FTL定义的非常通用数据分页指令,有源码,有使用示例。使用效果图可以参看本人博客中的相关文章:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
前端页面通常使用JSP或FreeMarker等模板技术来渲染,通过Struts2的标签库,可以轻松地遍历分页对象中的数据并显示出来。同时,需要提供上一页、下一页等导航链接,这可以通过修改Action中的页码属性,然后重定向或...
综上所述,经典Struts2分页方法涉及了Action、Model、DAO、结果映射、视图、拦截器、JSP/Freemarker标签库、URL参数、分页算法和最佳实践等多个方面。通过学习和实践这些知识点,Java Web开发者能够更好地理解和应用...
5. **视图渲染**:在JSP或Freemarker等模板引擎中,利用Struts2插件提供的标签库或者自定义标签,展示分页信息,如页码、总页数等。 6. **前端交互**:通过Ajax或页面重定向,用户可以无刷新地切换页面,同时,前端...
在这个"FreeMarker 写的一个分页macro(宏)测试"中,我们可以看到如何使用FreeMarker来实现一个简单的分页功能。下面我们将深入探讨这一主题。 首先,`PaginationUtil.java`可能是实现分页逻辑的工具类。在Java中,...
标题“围绕分页的练习(1)(ssh+freemarker)”指的是一个关于使用Spring、Struts和Hibernate(SSH)框架以及Freemarker模板引擎进行分页功能实现的编程练习。SSH是一个流行的企业级Java web应用开发框架,而Freemarker...
Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面!这是一个相对网上较全的案例。源码内含数据库文件sql.sql及效果图!本人致力于完整的Demo。欢迎关注!回头补上分页。敬请期待!
通过分析这个BBS源码,我们可以学习到如何在Struts框架下实现用户认证、权限控制、数据验证、分页、搜索等功能。同时,对于理解和掌握MVC模式及其在实际项目中的应用,也有很大帮助。 此外,该项目还涉及到其他技术...
本资源提供了基于SSH(Struts2、Hibernate、Spring)框架和MVC(Model-View-Controller)模式的分页操作源码,便于开发者理解和实现。 **SSH框架分页** SSH是Java Web开发中常用的三大开源框架的组合,包括Struts2...
本练习主要关注如何在SSH(Spring、Struts2、Hibernate)框架下结合FreeMarker模板引擎实现分页功能。通过这个练习,我们可以学习到以下几个关键知识点: 1. **SSH框架集成**: - **Spring**:Spring作为应用的...
深入研究这些源码,你可以了解到如何配置 Struts 的 XML 配置文件,如何编写 Action 类,以及如何在 EXT 中定义组件和数据源,以及如何利用 EXT Direct 实现前后端通信。 总结来说,"ext json struts 完整无错源码...
Struts2分页通常涉及到以下几个关键组件: 1. **Action类**:这是处理用户请求的核心,通常包含获取总记录数、获取当前页数据以及计算页码等逻辑。 2. **DAO(Data Access Object)**:负责与数据库交互,获取数据...
在这个"SSH分页源码"中,我们主要关注的是分页功能的实现。 在Web开发中,分页是一种常见的数据展示方式,特别是在处理大量数据时,分页可以提高用户体验,避免一次性加载过多数据导致页面响应变慢。在SSH框架中,...
本项目基于MVC架构,利用Struts2框架,用Java语言实现了基本的博客功能,包括创建、读取、更新和删除(CRUD)操作,并且具备前台页面的分页功能。 **一、MVC模式** 1. **模型(Model)**:模型层是应用程序的核心...
"商业编程-源码-AfengPager通用URL分页源码及Demo.zip" 是一个专门针对这一需求提供的开源解决方案,它提供了 AfengPager 这个组件,用于实现URL分页功能。 AfengPager 是一个高效且灵活的分页工具,主要适用于Java...
这个“struts+spring+hibernate通用分页方法”是关于如何在整合这三大框架的项目中实现高效且可复用的分页功能的知识点。 首先,让我们了解分页的基本概念。在Web应用中,特别是在处理大数据量时,分页是一种提高...
jeecms v9.3 正式版 源码包 更新日志 1、栏目添加选择模型模板只选择一个报错 2、内容复用待审核查询报错(开源版) 3、根栏目添加内容报错 4、后台页面样式调整 5、后台编辑器分页问题 7、数据统计今日...