Struts2 实现分页

http://songshu0616.blog.163.com/blog/static/26250151201041731939595/

1.转自:http://www.cnblogs.com/shiyangxt/archive/2008/11/04/1316737.html
环境:MyEclipse6.5+Mysql5+struts2.0.11

实现分页用到三个类,分别为NewsDao.java(接口),NewsDaoImpl.java(实现),ListAction.java(调用方法)。

当然还有配好连接池的Mysql连接辅助类。在此不做过多介绍。

NewsDao.java
package com.sy.dao;

import java.util.List;

import com.sy.vo.News;

public interface NewsDao {



public List<News> queryByPage(int pageSize,int pageNow);

public int count();


}



NewsDaoImpl.java
package com.sy.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import com.sy.dao.NewsDao;
import com.sy.util.DataBaseConnection;
import com.sy.util.StringUtil;
import com.sy.vo.News;

public class NewsDaoImpl implements NewsDao {


//获取分页新闻列表
@SuppressWarnings("unchecked")
public List<News> queryByPage(int i,int pageSize){
List<News> newss=new ArrayList();

PreparedStatement pstmt = null ;
String sql = null ;
ResultSet rs = null ;
DataBaseConnection dbc = null ;
dbc = new DataBaseConnection() ;

sql = "select * from struts2new order by id asc limit " + i + "," + pageSize;
try
{

pstmt = dbc.getConnection().prepareStatement(sql);

rs = pstmt.executeQuery() ;
while(rs.next())
{
News news=new News();
news.setId(rs.getInt("id"));
news.setName(rs.getString("name"));
news.setTitle(rs.getString("title"));
news.setDate(rs.getString("date"));
news.setEmail(rs.getString("email"));
news.setContent(rs.getString("content"));
i++;
newss.add(news);
}
rs.close() ;
pstmt.close() ;
}
catch(Exception e)
{
System.out.println(e) ;
}
finally
{
dbc.close();
}
return newss;
}
//查询总行数
public int count() {
int intRowCount = 0;//总行数
PreparedStatement pstmt = null ;
String sql = null ;
ResultSet rs = null ;
DataBaseConnection dbc = null ;
dbc = new DataBaseConnection() ;

sql = "select count(id) from struts2new order by id asc";
try
{
pstmt = dbc.getConnection().prepareStatement(sql);
rs = pstmt.executeQuery();
rs.next();//游标指向第一行
intRowCount=rs.getInt(1);//取得总行数
rs.close() ;
pstmt.close() ;
}
catch(Exception e)
{
System.out.println(e) ;
}
finally
{
dbc.close();
}
return intRowCount;
}
}

ListAction.java


package com.sy.action;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.sy.dao.AdminDao;
import com.sy.dao.NewsDao;
import com.sy.dao.impl.AdminDaoImpl;
import com.sy.dao.impl.NewsDaoImpl;
import com.sy.vo.Admin;
import com.sy.vo.News;

public class ListAction extends ActionSupport {

private static final long serialVersionUID = 1L;
int i=1;//中间变量
private int k;//储存最大页面数
private int pageNow=1; //页码数,初始为1
private int pageSize = 5 ; //页面行数
private int intRowCount;//总行数
private int intPageCount;//总页数
private Admin admin;
private List<Admin> Adminss;
private News news;
@SuppressWarnings("unchecked")
private List<News> Newss;

private int id;
private int aid;

public News getNews() {
return news;
}

public void setNews(News news) {
this.news = news;
}

@SuppressWarnings("unchecked")
public List<News> getNewss() {
return Newss;
}
public void setNewss(List<News> newss) {
Newss = newss;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}
public Admin getAdmin() {
return admin;
}

public void setAdmin(Admin admin) {
this.admin = admin;
}

public List<Admin> getAdminss() {
return Adminss;
}

public void setAdminss(List<Admin> adminss) {
Adminss = adminss;
}
public int getAid() {
return aid;
}

public void setAid(int aid) {
this.aid = aid;
}

public int getPageNow() {
return pageNow;
}

public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getIntRowCount() {
return intRowCount;
}

public void setIntRowCount(int intRowCount) {
this.intRowCount = intRowCount;
}

public int getIntPageCount() {
return intPageCount;
}

public void setIntPageCount(int intPageCount) {
this.intPageCount = intPageCount;
}
public int getK() {
return k;
}

public void setK(int k) {
this.k = k;
}
@SuppressWarnings("unchecked")
@Override
//显示新闻列表
public String execute() throws Exception {

NewsDao npage=new NewsDaoImpl();
intRowCount=npage.count();
k=(intRowCount + pageSize - 1) / pageSize;
intPageCount = (intRowCount + pageSize - 1) / pageSize;//计算出总页数
if(pageNow<1){
pageNow=1;
}

if(pageNow > intPageCount)
pageNow=intPageCount;
i = (pageNow -1)*pageSize;
NewsDao nlist=new NewsDaoImpl();
if(null!=nlist.queryByPage(i,pageSize)){
Newss = nlist.queryByPage(i,pageSize);
return SUCCESS;
}else{
return "failure";
}
}
..
}



struts.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="news" extends="struts-default">

..
<!-- 查看新闻列表 -->
<action name="list" class="com.sy.action.ListAction">
<result>/listNews.jsp</result>
<result name="failure">/Showfailure.jsp</result>
</action>

</package>
</struts>



显示页面listNews.jsp


<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>


..


<center>
共<s:property value="intRowCount"/>记录  
第<s:property value="pageNow"/>页  
<s:url id="url_pre" value="list.action">
<s:param name="pageNow" value="pageNow-1"></s:param>
</s:url>

<s:url id="url_next" value="list.action">
<s:param name="pageNow" value="pageNow+1"></s:param>
</s:url>
<s:iterator value="Newss" status="status">
<s:url id="url" value="list.action">
<s:param name="pageNow" value="pageNow"/>
</s:url>
</s:iterator>
<s:if test="pageNow==1">
<s:a href="%{url_pre}">最前一页</s:a>
</s:if>
<s:else>
<s:a href="%{url_pre}">上一页</s:a>
</s:else>
<s:if test="pageNow==k">
<s:a href="%{url_next}">最后一页</s:a>
</s:if>
<s:else>
<s:a href="%{url_next}">下一页</s:a>
</s:else>
</center>
</body>
</html>



效果:





2.
struts2分页导航
首页 | 上一页 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] | 下一页 | 尾页  
上面效果中的 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] 这个效果用struts2的bean标签可以完成。如下:

<s:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="first" value="1" />//循环开始 这用时要放变量来反映分页导航条的变化
<s:param name="last" value="10" />//循环结束 这用时要放变量来反映分页导航条的变化


<s:iterator>//循环分页导航

<s:if test="pager.currentPage!=current-1">//不是当前页的显示效果
<a href="http://songshu0616.blog.163.com/blog/<s:property value="#
URL"/>&pageNum=<s:property/>">
[<s:property/>]</a>
</s:if>
<s:else>//当前页的显示效果
<font color="red"><s:property/></font>
</s:else>
</s:iterator>
</s:bean>

共大家参考。


3.http://blog.csdn.net/hy0231/archive/2008/12/15/3522791.aspx

1,view层

<s:url id="url_pre" value="queryMember.action">
<s:param name="pageCur" value="pageCur-1"></s:param>
</s:url>
<s:url id="url_next" value="queryMember.action">
<s:param name="pageCur" value="pageCur+1"></s:param>
</s:url>
<s:a href="http://songshu0616.blog.163.com/blog/%{url_pre}">上一页</s:a>

<s:iterator value="memberList" status="st">
<s:url id="url" value="queryMember.action">
<s:param name="pageCur" value="pageCur"/>
</s:url>
</s:iterator>
<s:a href="http://songshu0616.blog.163.com/blog/%{url_next}">下一页</s:a>

2,Action层

public class MemberListAction
{
private int pageCur = 1;
private int totalCount = 0;
private int totalPage = 0;
private List memberList = null;

public String execute() throws Exception
{
MemberDAO dao = new MemberDAO();

/*这里是做分页的处理,有总记录数temp,总页数totalPage,当前页数pageCur

SysConstant.pageSize是一个常量,代表每页显示的记录数

*/
//总数量
int temp = dao.getCount(id,name);
setTotalCount(temp);

if((pageCur-1)*SysConstant.pageSize >= temp)
{
pageCur = pageCur - 1;
}
if(pageCur <= 0)
{
pageCur = 1;
}
if(temp == 0)
{
totalPage = 0;
}
else
{
totalPage =
(int) Math.ceil((double) temp / SysConstant.pageSize);
}
/**/
memberList = dao.getMember(id,name,pageCur);
return "SUCC";
}

3,DAO层

这里直接写SQL。

MSQL的分页脚本:/*pageCur是当前页数,pageSize是每页显示记录数*/

select * from tmember limit ((pageCur-1)*pageSize),(pageCur*pageSize)

ORACLE的分页脚本:

select * from (
select a.*,rownum as a_rownum from (
select * from tmember order by id
) a where rownum<=(pageCur*pageSize)
) b where b.a_rownum>(pageCur-1)*pageSize
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值