您的位置:首页 > 编程语言 > Java开发

Struts2 分页

2014-12-31 07:44 253 查看
注意,Struts2 分页改进版本已经发布在:/article/1533866.html

代码结构



数据库操作javaBean

package com.rctraffic110.bean;  
 
 
/**  
* create by ni掌柜  
* 实现对数据库的访问和操作 
*/  
import java.sql.*;  
public class SqlBean{ 
           /* 
            * 构造函数 
            * 加载数据库mysql数据库驱动 
            */ 
public SqlBean(){ 
try{  
//加载驱动器  
Class.forName(DatabaseDriver);  
}  
catch(java.lang.ClassNotFoundException e){  
System.err.println("加载驱动器有错误:"+e.getMessage( ));  
}  
}  
 
/* 
 *查询数据库信息 select 
 *@param sql 数据库查询语句  
 *@param rs 查询结果集 
 */ 
public ResultSet executeSelect(String sql){  
 rs=null;  
try{  
conn=DriverManager.getConnection(dateUrl,dbaName,dbaPws);  
Statement stmt=conn.createStatement();  
rs=stmt.executeQuery(sql);  
}  
catch(SQLException ex){  
System.err.println("执行查询有错误:"+ex.getMessage() );  
System.out.print("执行查询有错误:"+ex.getMessage()); //输出到客户端  
}  
return rs;  
}  
 
     /* 
      * 添加数据 insert 
      * @param sql 数据库添加语句 
      * @param num 执行的条数 
      */ 
public int executeInsert(String sql){  
try{  
conn=DriverManager.getConnection(dateUrl,dbaName,dbaPws);  
Statement stmt=conn.createStatement( );  
int num = stmt.executeUpdate(sql); 
return num; 
}  
catch(SQLException ex){  
System.err.println("执行插入有错误:"+ex.getMessage() );  
System.out.print("执行插入有错误:"+ex.getMessage());//输出到客户端  
return 0; 
}  
}  
 
    /* 
     * 更新数据库 update 
     * @param sql 数据库更新语句 
     * @param num 执行数量 
     */ 
public int executeUpdate(String sql){  
rs=null;  
try{  
conn = DriverManager.getConnection(dateUrl,dbaName,dbaPws);  
Statement stmt = conn.createStatement();  
int num = stmt.executeUpdate(sql); 
return num; 
}  
catch(SQLException ex){  
System.err.println("执行更新有错误:"+ex.getMessage() );  
System.out.print("执行更新有错误:"+ex.getMessage()); //输出到客户端  
return 0; 
}   
} 
 
/* 
 *  删除数据 delete 
 *  @param sql 数据库删除语句 
 *  @param num 执行数量 
 */ 
public int executeDelete(String sql){  
try{  
conn=DriverManager.getConnection(dateUrl,dbaName,dbaPws);  
Statement stmt=conn.createStatement( );  
int num = stmt.executeUpdate(sql);  
return num; 
}  
catch(SQLException ex){  
System.err.println("执行删除有错误:"+ex.getMessage() );  
System.out.print("执行删除有错误:"+ex.getMessage()); //输出到客户端  
return 0; 
}  
} 
    /* 
     * 关闭数据库 close 
     */ 
public void closeDB(){  
try{  
conn.close();  
conn = null; 
}  
catch(Exception end){  
System.err.println("执行关闭Connection对象有错误:"+end.getMessage( ) );  
System.out.print("执行执行关闭Connection对象有错误:有错误:"+end.getMessage()); //输出到客户端  
}  
} 
//定义连接对象  
public Connection conn=null;  
//定义操作数据库后返回的结果记录集  
public ResultSet rs=null;  
/////预设初始值  
                  //数据源库驱动器  
private String DatabaseDriver="com.mysql.jdbc.Driver";  
//DataSource 数据源名称DSN   
private String dateUrl = "jdbc:mysql://localhost/rctraffic110"; 
private String dbaName = "root"; 
private String dbaPws = "123456"; 
  
//定义方法  
/*setXxx用于设置属性值;getXxx用于得到属性值*/  
public void setDatabaseDriver(String Driver){ 
this.DatabaseDriver=Driver;  
}  
public String getDatabaseDriver(){  
return (this.DatabaseDriver);  
} 
 
public String getDateUrl() { 
    return dateUrl; 
} 
 
public void setDateUrl(String dateUrl) { 
    this.dateUrl = dateUrl; 
} 
 
public String getDbaName() { 
    return dbaName; 
} 
 
public void setDbaName(String dbaName) { 
    this.dbaName = dbaName; 
} 
 
public String getDbaPws() { 
    return dbaPws; 
} 
 
public void setDbaPws(String dbaPws) { 
    this.dbaPws = dbaPws; 
} 
 
 
  
 
}//SqlBean


分页业务

package com.rctraffic110.service; 
 
import java.sql.ResultSet; 
import java.util.ArrayList; 
import javax.servlet.http.HttpServletRequest; 
import org.apache.struts2.ServletActionContext; 
import com.rctraffic110.bean.SqlBean; 
import com.rctraffic110.model.Article; 
 
public class ArticleService { 
 
    /* 
     * 分页显示所有该类别的文章 
     * @param cno 类别编号 
     * @param pageSize 每页的大小 
     * @param pageNow  当前页码 
     */ 
    public ArrayList<Article> queryByCnoPaging(String cno, int pageSize, int pageNow){ 
        ResultSet rs  = null; 
        String sql = ""; 
        ArrayList<Article> _articleList = new ArrayList<Article> (); 
        SqlBean queryByCnoPaging = new SqlBean(); 
        //计算总页数 
        String _sqlTotall ="SELECT COUNT(*) totalNum FROM article WHERE cno ='"+ cno +"'"; 
        try{ 
            rs = queryByCnoPaging.executeSelect(_sqlTotall ); 
            while(rs.next()) 
            { 
                HttpServletRequest request = ServletActionContext.getRequest(); 
                //把总记录数放入request 
                request.setAttribute("totalNum",rs.getInt("totalNum" ) ); 
                //向上取整 
                int _totallPage = (int) Math.ceil((double) rs.getInt("totalNum" ) /(pageSize*1.0) ); 
                String _notLast = "1"; 
                //已经是最后一页了 
                if(_totallPage <= pageNow) _notLast = "0";       
                   
                request.setAttribute("notLast",_notLast); 
                request.setAttribute("totallPage",_totallPage); 
                request.setAttribute("pageNow",pageNow); 
            } 
        }catch(Exception ee){;} 
                  if ( pageSize > 0 && pageNow > 0) { 
                  sql =  "SELECT * FROM article WHERE cno='"+ cno +"' ORDER BY id LIMIT "+(pageNow*pageSize-pageSize)+","+pageSize; 
                  } 
                   
                  try{ 
                    rs = queryByCnoPaging.executeSelect(sql);  
                    while(rs.next()) 
                      {  
                        // 从数据库中查询出这个类别的指定数目的所有文章 
                        Article _article = new Article(); 
                        //赋值 
                        _article.setAno(rs.getString("ano" ) ); 
                        _article.setTitle(rs.getString("title" ) ); 
                        _article.setAuthor(rs.getString("author" ) ); 
                        _article.setContent(rs.getString("content" ) ); 
                        _article.setPubdate(rs.getString("pubdate" ) ); 
                        //去除日期中的具体时间 
                        String[] unit = _article.getPubdate().split("-" ); 
                        _article.setPubdate(unit[0] + "-" + unit[1] + "-" + unit[2] ); 
                         
                        _article.setRead(rs.getInt("read" ) ); 
                        _article.setSource(rs.getString("source" ) ); 
                        _article.setKeyword(rs.getString("keyword" ) ); 
                        _article.setImagesrc(rs.getString("imagesrc" ) ); 
                        _article.setCno(rs.getString("cno" ) ); 
                        _articleList.add(_article ); 
                    } 
                       rs.close(); 
                     queryByCnoPaging.closeDB(); 
                 }catch(Exception ee) 
                 { 
                     ; 
                 } 
        return _articleList; 
    } 
}


action控制

package com.rctraffic110.action; 
 
import com.opensymphony.xwork2.ActionSupport; 
import com.rctraffic110.bean.SqlBean; 
import com.rctraffic110.model.Article; 
import com.rctraffic110.service.ArticleService; 
import java.sql.*; 
import java.util.Map; 
import java.util.ArrayList; 
import org.apache.struts2.interceptor.ApplicationAware; 
import org.apache.struts2.interceptor.RequestAware; 
import org.apache.struts2.interceptor.SessionAware; 
 
 
public class ArticleAction extends ActionSupport{ 
    private static final long serialVersionUID = 1L; 
 
     
    public String execute() throws Exception { 
        return "default"; 
    } 
     
     
     
    /* 
     * 分页显示新闻列表 
     */ 
    public String queryByCnoPaging() 
    { 
        ArticleService articleService = new ArticleService(); 
        this.articleListPaging = articleService.queryByCnoPaging(this.getCno(),  
                                                                this.getPageSize(),  
                                                                this.getPageNow()); 
        return SUCCESS ; 
    } 
 
    //类别编号 
    private String cno; 
    //用来接受新闻列表的一些参数 
    private int pageNow = 1 ;                           //初始化为1,默认从第一页开始显示 
    private int pageSize = 10 ;                         //每页显示10条记录 
    private ArrayList<Article> articleListPaging ;      //新闻列表的集合 
     
    private Map<String, Object> request; 
    private Map<String, Object> session; 
    private Map<String, Object> application; 
     
     
    public String getCno() { 
        return cno; 
    } 
    public void setCno(String cno) { 
        this.cno = cno; 
    } 
    public void setRequest(Map<String, Object> request) { 
        this.request = request;  
    } 
    public void setSession(Map<String, Object> session) { 
        this.session = session;  
    } 
    public void setApplication(Map<String, Object> application) { 
        this.application = application;  
    } 
     
 
    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 ArrayList<Article> getArticleListPaging() { 
        return articleListPaging; 
    } 
    public void setArticleListPaging(ArrayList<Article> articleListPaging) { 
        this.articleListPaging = articleListPaging; 
    } 
}


struts.xml

<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    "struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <package name="struts2" extends="struts-default"> 
    <!-- =====================后台管理========================= --> 
    <!-- 列出所有的新闻 --> 
        <action name="admin_allArticle" class="com.rctraffic110.action.ArticleAction" method="queryByCnoPaging"> 
            <result name="success">/admin/right/articleList.jsp</result> 
            <result name="login">/default.jsp</result> 
        </action> 
    </package> 
</struts>


jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%@ taglib uri="/struts-tags" prefix="s"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
 <!-- 取消编辑 --> 
                   <script type="text/javascript" src="/lunhua/public/deleteconfirm.js"> 
</script> 
     
<title>所有文章(分页)</title> 
     
    <meta http-equiv="pragma" content="no-cache"> 
    <meta http-equiv="cache-control" content="no-cache"> 
    <meta http-equiv="expires" content="0">     
 
 
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
 
 <div align="center"> 
    <table border="0" width="700"> 
        <tr> 
                    <td align="center" height="10" colspan="3"> 
                    <p align="left"> 
                    <font face="方正舒体" size="6" color="#6699FF"><b>所有文章(分页)</b></font></td> 
      </tr> 
                <tr> 
                    <td height="2" align="center" colspan="3"> 
                    <hr color="c0c0c0" width="500" align="left"></td> 
        </tr>   </table> 
    </div> 
 
 
 
<div > 
 
<s:if test="null== articleListPaging || articleListPaging.isEmpty()"> 
没有更多文章了 
</s:if> 
<s:else> 
     <table width="" border="1" align="center" style="font-size:11px"> 
       <tr> 
        <td width="300" align="center" valign="middle">新 闻 标 题</td> 
         <td width="100" align="center" valign="middle">发表人</td> 
         <td width="100" align="center" valign="middle">发表日期</td> 
         <td width="50" align="center" valign="middle">详情</td> 
         <td width="70" align="center" valign="middle">操作</td> 
       </tr> 
 
            <!-- 对action中传来的参数进行遍历 --> 
           <s:iterator value="articleListPaging"> 
            
        <tr> 
        <td align="center" valign="middle"><s:property value="title"/></td> 
         <td align="center" valign="middle"><s:property value="author"/></td> 
         <td align="center" valign="middle"><s:property value="pubdate"/></td> 
          <td align="center" valign="middle"><a href="detilnews.jsp?id=<s:property value='id'/>">详</a></td> 
          <td align="center" valign="middle"> 
          <a href="editnews.jsp?id=<s:property value='id'/>">编辑</a> 
         <b>or</b > 
         <a  href="delnews.action?id=<s:property value='id'/>"  onclick="return  Confirms();">删除</a> 
         </td> 
       </tr> 
        </s:iterator> 
</table> 
        <!-- 以下是一些翻页操作 --> 
        共有<s:property value="#request.totalNum" />篇文章 共有<s:property value="#request.totallPage" />页 当前第<s:property value="#request.pageNow" /> 
        <!-- 页码处理 --> 
        <s:url id="url_pre" value="admin_allArticle.action"> 
         <s:param name="pageNow" value="pageNow-1"></s:param> 
         <s:param name="cno" value="cno"></s:param> 
        </s:url> 
         <s:url id="url_next" value="admin_allArticle.action"> 
         <s:param name="pageNow" value="pageNow+1"></s:param> 
         <s:param name="cno" value="cno"></s:param> 
        </s:url> 
         
        <!-- 第一页 --> 
        <s:if test="pageNow == 1"> 
         
                <s:if test="pageNow < #request.totallPage"> 
                <s:a href="%{url_next}">下一页</s:a> 
                </s:if> 
        </s:if> 
        <s:if test="pageNow > 1"> 
             
                    <!-- 最后一页 --> 
                <s:if test="pageNow >= #request.totallPage"> 
                <s:a href="%{url_pre}">上一页</s:a> 
                </s:if> 
                <!-- 其它普通页面 --> 
                <s:else> 
                   <s:a href="%{url_pre}">上一页</s:a> 
                   <s:a href="%{url_next}">下一页</s:a> 
                </s:else> 
        </s:if> 
         
 
</s:else>   <!-- 有文章结束 --> 
    </div> 
     
</body> 
</html>


效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: