Struts2 实现分页(网址,文章收藏)

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"/>记录&nbsp;&nbsp;
        第
<s:property value="pageNow"/>&nbsp;&nbsp;
         
<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="<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="%{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="%{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、付费专栏及课程。

余额充值