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>
效果图
相关文章推荐
- Web框架梳理:第一章:Struts2入门、传值、分页、对象、值栈、OGNL、响应方式、标签、拦截器
- struts2中分页简单实现
- 在JSP中使用Struts2标签分页 限制页码只显示10页 带分页算法 样式
- 使用hibernate和struts2实现分页功能
- struts2实现最简单的分页技术
- SSH 分页方法一,基于struts2
- Struts2、Hibernate、Spring整合的泛型DAO,以及通用的分页技术
- Spring3.x_Struts2.x_Hibernate3.x整合之分页pager-taglib的简单使用
- 用hibernate实现动态查询+分页的模板,另附struts2的标签在分页中的使用
- java + struts2 分页技术
- struts2自定义分页标签
- JSP自定义分页标签,Struts2分页标签
- Struts2 web层 分页解决方案
- Struts2,oracle实现GOOGLE的分页样式
- SSH 分页方法一,基于struts2
- Struts2 Freemarker Jmesa(表格、分页) 使用的一点心得
- hibernate和struts2实现分页功能
- 模板模式抽取Struts2模型驱动及分页重复代码,简化开发
- struts2 做分页
- 学习struts2建bbs总结六:hibernate分页查询的问题--分页后程序定时无响应