Struts2 实用分页教程与配置详解
在Struts2框架中实现分页功能是一项常见的需求,尤其是在处理大量数据时,提高用户体验和性能优化至关重要。本文将介绍如何在Struts2中实现实用的分页功能,并结合一个简单的例子进行说明。 首先,了解Struts2的基本配置是必要的。Struts2是一个基于Java的MVC(模型-视图-控制器)框架,它提供了一种组织Web应用的方式,使得代码结构清晰,易于维护。配置文件如web.xml中包含过滤器(filter)和映射(filter-mapping),用于将Struts2的请求路由到相应的Action。在本文提供的web.xml示例中,我们看到`<filter>`标签定义了一个名为`struts2`的过滤器,其类`org.apache.struts2.dispatcher.FilterDispatcher`负责处理Struts2的请求和响应。 为了实现实体分页,我们需要在Action中处理与数据库的交互。这里提到的数据库操作包括创建表、插入数据以及删除和恢复数据。在Struts2中,Action通常与业务逻辑相关联,例如处理用户请求,查询数据库并返回分页结果。我们可以使用`List`对象来存储数据,然后使用`org.apache.struts2.ServletActionContext.getRequest()`获取HttpServletRequest对象,进一步调用`list.size()`获取总记录数,用于计算分页参数。 分页的核心在于获取特定页的数据子集。这可以通过使用如`Hibernate`或`JPA`等持久层框架的`list()`方法配合分页插件(如`ognl-tools`或`Apache Commons DBCP`中的`DBCPDataSource`)来实现。对于每一页,我们可以设置起始位置(通常为`page * pageSize`)和页面大小(`pageSize`),从而限制返回的数据量。 例如,我们可以编写一个`StudentListAction`类,其中包含以下方法: ```java public class StudentListAction { private int currentPage; private int pageSize; private List<Student> students; // 方法用于查询分页数据 public String execute() { currentPage = ServletActionContext.getRequest().getParameter("page") != null ? Integer.parseInt(ServletActionContext.getRequest().getParameter("page")) : 1; pageSize = 10; // 假设每页10条数据 int startIndex = (currentPage - 1) * pageSize; Session session = HibernateUtil.getSessionFactory().openSession(); Criteria criteria = session.createCriteria(Student.class); criteria.setFirstResult(startIndex); criteria.setMaxResults(pageSize); students = criteria.list(); return "list"; // 返回分页后的列表页面 } // 通过Action将分页数据传递给视图 public void setStudents(List<Student> students) { this.students = students; } } ``` 在这个例子中,`execute()`方法根据传入的页码参数执行分页查询,然后将结果集合`students`传递给视图。视图(通常是jsp页面)会渲染这些数据,并使用链接或AJAX技术跳转到下一页或上一页。 最后,在JSP页面中展示分页导航,可以使用`ognl`表达式动态计算总页数和当前页的链接,如下所示: ```jsp <%@ taglib prefix="s" uri="/struts-tags"%> ... <s:iterator value="%{students}" status="item"> <!-- 显示学生数据 --> </s:iterator> <!-- 分页导航 --> <ul> <li><a href="<s:url action="execute" params="{'page': #{currentPage - 1}}">上一页</a></li> <li><a href="<s:url action="execute" params="{'page': #{currentPage + 1}}">下一页</a></li> </ul> ``` 总结起来,实现Struts2分页的关键在于配置好过滤器,使用Action处理分页逻辑,利用持久层框架查询数据,并在视图中展示数据和导航。这有助于构建高效且用户友好的Web应用,尤其是在处理大量数据时能有效提升用户体验。
在开发web程序时,从数据库中取出来的数据一般都要分页显示在页面上,分页显示的方法非常多,有人写自定义标签,用自己写的标签进行分页显示,我个人觉得这是一种比较好的方法。下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库中查询出来并进行了封装的那些对象,然后通过Struts2的标签遍历List里的每个对象,并把这些对象里所包含的属性取出来展现在页面上。下面是具体的步骤:
所用工具:JDK1.6 + MyEclipse6.0 + Tomcat6.0 + MySQL5.0 + struts 2.0.11
1、新建一个web工程,导入struts2中相应的jar包和mysql数据驱动包。
2、编写web.xml文件,其代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
drop database if exists page;
create database page ;
use page;
create table student (
stu_id integer auto_increment,
stuName varchar(255) not null,
address varchar(255) not null,
stuPhone varchar(255)not null,
primary key(stu_id)
);
insert into student(stuName,address,stuPhone) values('杨华林','长沙','13787825190');
insert into student(stuName,address,stuPhone) values('李明清','天津','13787525190');
insert into student(stuName,address,stuPhone) values('李小华','大连','13788451190');
insert into student(stuName,address,stuPhone) values('郑小明','苏州','13787052188');
insert into student(stuName,address,stuPhone) values('杨一新','西安','13787851190');
insert into student(stuName,address,stuPhone) values('王新任','广州','13787056460');
insert into student(stuName,address,stuPhone) values('谢小华','深圳','13787075550');
insert into student(stuName,address,stuPhone) values('王建明','厦门','13788853690');
insert into student(stuName,address,stuPhone) values('秦一生','北京','13788689236');
insert into student(stuName,address,stuPhone) values('田翠林','杭州','13787655150');
insert into student(stuName,address,stuPhone) values('陈小明','广州','13787623668');
4、编写PageDAO类,该类用于从数据库中取出所有的学员信息,把这些学员信息封装成一个Student对象并将
其放入List中。
package org.hnylj.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
剩余9页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦