zoukankan      html  css  js  c++  java
  • 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>

    效果:

    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
  • 相关阅读:
    Android Bitmap 载入与像素操作
    java poi读取excel公式,返回计算值(转)
    模块化Java简介
    java模式
    java—三大框架详解,其发展过程及掌握的Java技术慨括
    java设计模式、框架、架构、平台之间的关系
    POI 怎么设置Excel整列的CellStyle啊
    POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
    POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】
    ActiveX插件的Z-Index属性无效问题解决
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4521596.html
Copyright © 2011-2022 走看看