下面就为您详细讲解“Java(基于Struts2) 分页实现代码”的完整攻略。
一、实现原理
Struts2框架提供了一个简单易用的分页标签库(pagetags),通过这个标签库可以非常方便地实现分页功能。具体实现流程如下:
- 在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的数据
- 如此类推
现在我们来看一下具体实现步骤:
- 在Action类中放置如下代码:
```java
// 定义List类型的玩家列表list,用于存放用户数据
private List
// 总记录数
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 假设我们要实现一个新闻列表分页功能,现在有如下需求: 现在我们来看一下具体实现步骤: ```java /* } ```html 以上就是Java(基于Struts2) 分页实现代码的完整攻略。 本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java(基于Struts2) 分页实现代码 - Python技术站
<s:pagelist first="首页" fastStep="1" prev="上一页" next="下一页" last="末页"
length="5" pageIndex="%{pageNo}" link="<s:url value='%{#parameters.url}'/>"/>
</div>
```
至此,用户分页列表功能已经实现。三、示例2
// 定义List类型的新闻列表list,用于存放新闻数据
private List
// 总记录数
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标签输出分页效果,例如:
<s:pagelist first="首页" fastStep="1" prev="上一页" next="下一页" last="末页"
length="5" pageIndex="%{pageNo}" link="<s:url value='%{#parameters.url}'/>"/>
</div>
```
至此,新闻列表分页功能已经实现。