Java(基于Struts2) 分页实现代码

yizhihongxing

下面就为您详细讲解“Java(基于Struts2) 分页实现代码”的完整攻略。

一、实现原理

Struts2框架提供了一个简单易用的分页标签库(pagetags),通过这个标签库可以非常方便地实现分页功能。具体实现流程如下:

  1. 在JSP页面上引用struts2分页标签库的tld文件。

<%@ taglib uri="/struts-tags" prefix="s" %>
2. 在Action中处理好分页所需的数据,并存入分页对象中(如:页码,每页行数,总行数等)。
3. 在JSP页面上使用s:iterator标签配合s:url标签产生超级链接。s:url中需要传递参数:当前页码,每页行数,总行数等。
4. 在JSP页面上使用s:pagelist标签输出前端样式,并显示分页效果。
5. 在Action中获取JSP提交过来的参数(当前页码,每页行数等),并根据这些参数进行集合的截取或查询数据库的处理,最后再封装成一个新的分页对象并传递回JSP页面供下一次分页使用。

二、示例1

假设我们要实现一个用户分页列表功能,现在有如下需求:

  • 单页显示5行数据
  • 第一页显示编号为1~5的数据
  • 点击下一页,显示6~10的数据
  • 如此类推

现在我们来看一下具体实现步骤:

  1. 在Action类中放置如下代码:

```java
// 定义List类型的玩家列表list,用于存放用户数据
private List userList;
// 总记录数
private int total;
// 当前页号
private int page;
// 每页显示多少条记录
private int size = 5;
// 总页数
private int pages;

/*
* 分页操作
*
* @return
/
public String page() {
// 获取总记录数
total = getUserService().getUserCount();
// 计算总页数
pages = total % size == 0 ? total / size : total / size + 1;

   // 获取当前页号
   int pageNo = getPage();
   if (pageNo <= 0) {// 非法页号,显示第1页
       pageNo = 1;
       setPage(pageNo);
   }
   if (pageNo > pages) {// 非法页号,显示最后一页
       pageNo = pages;
       setPage(pageNo);
   }
   // 获取前一页的页号,如果当前就是第一页,返回1
   int prePage = pageNo <= 1 ? 1 : pageNo - 1;
   // 获取下一页的页号,如果当前就是最后一页,返回最后一页
   int nextPage = pageNo >= pages ? pages : pageNo + 1;

   // 获取当前页的数据
   userList = getUserService().getUserByPage(pageNo, size);

   // 将分页信息存放至request域中
   HttpServletRequest request = ServletActionContext.getRequest();
   request.setAttribute("prePage", prePage);// 前一页页号
   request.setAttribute("nextPage", nextPage);// 后一页页号
   request.setAttribute("pageNo", pageNo);// 当前页页号
   request.setAttribute("pages", pages);// 总页数

   return SUCCESS;

}
```
2. 在JSP页面中,使用s:iterator标签产生超链接并传递参数,例如:

html
<s:url id="userUrl" action="userPage">
<s:param name="size">5</s:param>
<s:param name="page">${pageNo}</s:param> <!-- 当前页码 -->
</s:url>
<s:iterator value="userList">
<tr>
<td><a href="<s:property value='%{userUrl}'/>">${id}</a></td>
<td><s:property value="username"/></td>
<td><s:property value="gender"/></td>
<td><s:property value="age"/></td>
<td><s:property value="email"/></td>
</tr>
</s:iterator>

3. 在JSP页面中,使用s:pagelist标签输出分页效果,例如:

```html


${size}
1


${size}
${prePage}


${size}
${nextPage}


${size}
${pages}

       <s:pagelist first="首页" fastStep="1" prev="上一页" next="下一页" last="末页" 
                   length="5" pageIndex="%{pageNo}" link="<s:url value='%{#parameters.url}'/>"/>
   </div>


```
至此,用户分页列表功能已经实现。

三、示例2

假设我们要实现一个新闻列表分页功能,现在有如下需求:

  • 单页显示10行数据
  • 第一页显示编号为1~10的数据
  • 点击下一页,显示11~20的数据
  • 如此类推

现在我们来看一下具体实现步骤:

  1. 在Action类中放置如下代码:

```java
// 定义List类型的新闻列表list,用于存放新闻数据
private List newsList;
// 总记录数
private int total;
// 当前页号
private int page;
// 每页显示多少条记录
private int size = 10;
// 总页数
private int pages;

/*
* 分页操作
*
* @return
/
public String page() {
// 获取总记录数
total = getNewsService().getNewsCount();
// 计算总页数
pages = total % size == 0 ? total / size : total / size + 1;

   // 获取当前页号
   int pageNo = getPage();
   if (pageNo <= 0) {// 非法页号,显示第1页
       pageNo = 1;
       setPage(pageNo);
   }
   if (pageNo > pages) {// 非法页号,显示最后一页
       pageNo = pages;
       setPage(pageNo);
   }
   // 获取前一页的页号,如果当前就是第一页,返回1
   int prePage = pageNo <= 1 ? 1 : pageNo - 1;
   // 获取下一页的页号,如果当前就是最后一页,返回最后一页
   int nextPage = pageNo >= pages ? pages : pageNo + 1;

   // 获取当前页的数据
   newsList = getNewsService().getNewsByPage(pageNo, size);

   // 将分页信息存放至request域中
   HttpServletRequest request = ServletActionContext.getRequest();
   request.setAttribute("prePage", prePage);// 前一页页号
   request.setAttribute("nextPage", nextPage);// 后一页页号
   request.setAttribute("pageNo", pageNo);// 当前页页号
   request.setAttribute("pages", pages);// 总页数

   return SUCCESS;

}
```
2. 在JSP页面中,使用s:iterator标签产生超链接并传递参数,例如:

html
<s:url id="newsUrl" action="newsPage">
<s:param name="size">10</s:param>
<s:param name="page">${pageNo}</s:param> <!-- 当前页码 -->
</s:url>
<s:iterator value="newsList">
<tr>
<td>${id}</td>
<td><a href="<s:property value='%{newsUrl}'/>"><s:property value="title"/></a></td>
<td><s:property value="author"/></td>
<td><s:property value="brief"/></td>
<td><s:date name="updateTime" format="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
</s:iterator>

3. 在JSP页面中,使用s:pagelist标签输出分页效果,例如:

```html


${size}
1


${size}
${prePage}


${size}
${nextPage}


${size}
${pages}

       <s:pagelist first="首页" fastStep="1" prev="上一页" next="下一页" last="末页" 
                   length="5" pageIndex="%{pageNo}" link="<s:url value='%{#parameters.url}'/>"/>
   </div>


```
至此,新闻列表分页功能已经实现。

以上就是Java(基于Struts2) 分页实现代码的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java(基于Struts2) 分页实现代码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Hibernate实现many-to-many的映射关系

    实现many-to-many映射关系的步骤一般如下: 创建数据库表格:many-to-many映射的本质是两个一对多关系,因此需要创建三张表:一个主要表,和两个从表。 定义实体类(Entity Class): 创建实体类,包含对应的类成员变量,其中需要注意的是,在类中要使用集合表示与其他实体类的关系。 建立映射关系:在实体类之间确定映射关系,通过注解实现 O…

    Java 2023年5月19日
    00
  • jsp实现从服务器下载xls文件到客户端的方法

    实现从服务器下载xls文件到客户端通常可以通过以下步骤来完成: 服务器端准备Excel文件 首先需要在服务器端生成或获取Excel文件。一种常见的方式是使用Java POI库来动态生成Excel文件。例如,以下代码可以生成一个包含数据的Excel文件: // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创…

    Java 2023年6月15日
    00
  • java邮件乱码的彻底解决方案

    下面是“Java邮件乱码的彻底解决方案”的完整攻略: 1. 问题描述 在使用Java程序发送邮件时,邮件内容中的中文字符可能会出现乱码现象,特别是在收件人使用的邮件客户端接收邮件时。如何避免这个问题,保证邮件内容能够正常显示呢? 2. 解决方案 Java发送邮件的原理是通过SMTP协议将纯文本或HTML格式的内容发送到邮件服务器,然后由邮件服务器将邮件传递到…

    Java 2023年5月20日
    00
  • JVM垃圾收集器详解

    我们来详细讲解一下“JVM垃圾收集器详解”的完整攻略。 什么是JVM垃圾收集器 在JVM内存中,经过一段时间后,会存在很多不再使用的对象,这些对象就成为了垃圾。为了释放这些垃圾占用的内存空间,JVM提供了垃圾收集器来进行自动的垃圾回收。 常见的垃圾收集算法 1. 标记-清除算法 这是一种比较早的垃圾收集算法,它的缺点是会产生大量的内存碎片。其工作流程如下: …

    Java 2023年5月20日
    00
  • ASP.NET中Webservice安全 实现访问权限控制

    在ASP.NET中使用WebService并保证安全性,需要实现访问权限控制。下面是实现这一目标的攻略,其中使用了两个示例。 1. 在Web.config文件中配置安全控制 在ASP.NET中,可以使用Web.config文件进行全局配置和安全控制。我们可以在Web.config文件中配置以下的内容,来限制WebService的访问权限: <syste…

    Java 2023年5月19日
    00
  • MyBatis开发Dao层的两种方式实现(原始Dao层开发)

    下面就来详细讲解”MyBatis开发Dao层的两种方式实现(原始Dao层开发)”的完整攻略。 1. 简介 Dao层是指数据访问对象层,负责与数据存储交互,实现数据的增删改查等一系列数据操作。在MyBatis开发中,Dao层有两种实现方式:原始Dao层开发和Mapper接口方式开发。 本文将详细介绍原始Dao层开发的实现流程和具体代码实现。原始Dao层开发是最…

    Java 2023年5月19日
    00
  • 华为鸿蒙HarmonyOS JavaUI 框架官网文档内容更新:组件开发指南、补充组件开发说明

    华为鸿蒙HarmonyOS JavaUI 框架官网文档更新内容包括组件开发指南和补充组件开发说明。以下是关于这两个方面的详细攻略: 组件开发指南 在HarmonyOS上进行组件开发需要使用Java语言进行开发,需要具备基本的Java语言基础知识和开发工具的使用技巧。 关注HarmonyOS官网文档的更新,获取最新的组件开发指南,阅读开发文档可以帮助我们快速上…

    Java 2023年5月24日
    00
  • Java MyBatis之Mapper代理详解

    Java MyBatis之Mapper代理详解 在MyBatis中,Mapper代理是一种方便且易于使用的方式来执行数据库操作。Mapper代理充当了DAO层与MyBatis框架之间的接口,从而将SQL语句执行的逻辑与业务逻辑分开。 1. Mapper代理的创建 Mapper代理是通过MyBatis框架自动生成的。MyBatis通过读取我们配置的Mapper…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部