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

下面就为您详细讲解“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日

相关文章

  • Java连接mysql数据库代码实例程序

    这里提供的完整攻略将帮助大家编写Java连接mysql数据库的代码实例程序。 步骤一:下载并安装JDBC驱动程序 在使用Java连接mysql数据库之前,我们需要下载并安装mysql JDBC驱动程序。这里我们以mysql-connector-java-8.0.25.jar为例,在这个网页上下载mysql JDBC驱动程序:https://dev.mysql…

    Java 2023年6月16日
    00
  • springData使用QueryDsl的示例代码

    让我来详细讲解一下“Spring Data 使用 Querydsl 的示例代码”的完整攻略。 简介 Querydsl 是一个基于 Java 类型化查询的框架,使得编写类型安全、易于理解的查询变得容易。 Spring Data 是 Spring 框架的一部分,通过提供抽象化的数据存储层来简化对数据访问的开发。Spring Data Querydsl 是 Spr…

    Java 2023年5月20日
    00
  • Java解压缩zip – 解压缩多个文件或文件夹实例

    下面是“Java解压缩zip – 解压缩多个文件或文件夹实例”的完整攻略: 前置要求 在进行Java解压缩zip操作之前,需要先安装并配置好Java开发环境。 解压缩多个文件或文件夹实例 在Java中,我们可以使用ZipFile类和ZipEntry类来进行解压缩操作。 ZipFile类 ZipFile类表示表示一个zip文件,我们可以通过它来获取zip文件中…

    Java 2023年5月20日
    00
  • Java 中的控制反转(IOC)详解

    Java 中的控制反转(IOC)详解 什么是控制反转? 控制反转(Inversion of Control,英文缩写为 IoC)是一种设计思想,其核心是将程序的控制权从程序代码中转移到框架或容器中,由框架或容器来管理程序的依赖关系和对象的创建与销毁。 为什么需要控制反转? 在传统的编程模式中,对象的创建和依赖关系都是在程序中完成的,这样就存在以下几个问题:1…

    Java 2023年5月26日
    00
  • ehcache开源缓存框架_动力节点Java学院整理

    EhCache开源缓存框架攻略 什么是EhCache EhCache是一个流行的、开源的缓存框架,它提供了快速、高效、可靠的缓存服务。EhCache的主要特点如下: 支持内存缓存和磁盘缓存 支持LRU、LFU、FIFO等多种缓存清理策略 支持缓存数据的过期时间设置 支持集群下多个应用共享缓存 EhCache使用指南 本节将以Java Spring框架为例,讲…

    Java 2023年5月20日
    00
  • JS实现鼠标移上去显示图片或微信二维码

    要实现鼠标移上去显示图片或微信二维码,可以使用JavaScript中DOM元素的事件和属性,具体的步骤如下: 首先,在HTML代码中,我们需要定义一个目标元素,即需要触发鼠标移动事件的元素。可以给这个元素设置一个id属性,方便在JavaScript中获取它的引用。例如: <div id="target">鼠标移上去触发事件&l…

    Java 2023年5月23日
    00
  • jdbc操作mysql数据库实例

    一、前言 Java Database Connectivity(JDBC)是Java提供的一种操作各种关系型数据库的API。本攻略将介绍如何使用JDBC操作MySQL数据库,包括连接MySQL数据库、创建表、插入记录、查询记录、更新记录和删除记录等操作。 二、依赖和环境需求 在开始实践之前,我们需要准备以下依赖和环境: MySQL数据库(可以是本地安装的,也…

    Java 2023年6月16日
    00
  • 由浅入深快速掌握Java 数组的使用

    一、前言 Java数组是一种非常常用的数据结构,用于存储相同类型数据的集合。熟练掌握数组的使用对Java开发非常重要。本文将从浅入深,逐步介绍Java数组的基本概念,创建和初始化数组,访问数组元素,以及数组的遍历和排序等内容。 二、什么是Java数组 Java数组是存储同一数据类型的固定大小的顺序集合。它是由相同数据类型的元素构成的,这些元素可以通过索引进行…

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