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 = ;//总行数
- 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();//取得总行数
- 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=;//中间变量
- private int k;//储存最大页面数
- private int pageNow=; //页码数,初始为1
- private int pageSize = ; //页面行数
- 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 - ) / pageSize;
- intPageCount = (intRowCount + pageSize - ) / pageSize;//计算出总页数
- if(pageNow<){
- pageNow=;
- }
- if(pageNow > intPageCount)
- pageNow=intPageCount;
- i = (pageNow -)*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>
效果:
struts2分页导航
- 首页 | 上一页 [] [] [] [] [] [] [] [] [] | 下一页 | 尾页
- 上面效果中的 [] [] [] [] [] [] [] [] [] 这个效果用struts2的bean标签可以完成。如下:
- <s:bean name="org.apache.struts2.util.Counter" id="counter">
- <s:param name="first" value="" />//循环开始 这用时要放变量来反映分页导航条的变化
- <s:param name="last" value="" />//循环结束 这用时要放变量来反映分页导航条的变化
- <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>
- 共大家参考。
- .http://blog.csdn.net/hy0231/archive/2008/12/15/3522791.aspx
- ,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>
- ,Action层
- public class MemberListAction
- {
- private int pageCur = ;
- private int totalCount = ;
- private int totalPage = ;
- 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-)*SysConstant.pageSize >= temp)
- {
- pageCur = pageCur - ;
- }
- if(pageCur <= )
- {
- pageCur = ;
- }
- if(temp == )
- {
- totalPage = ;
- }
- else
- {
- totalPage =
- (int) Math.ceil((double) temp / SysConstant.pageSize);
- }
- /**/
- memberList = dao.getMember(id,name,pageCur);
- return "SUCC";
- }
- ,DAO层
- 这里直接写SQL。
- MSQL的分页脚本:/*pageCur是当前页数,pageSize是每页显示记录数*/
- select * from tmember limit ((pageCur-)*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-)*pageSize
Struts2 实现分页的更多相关文章
- hibernate和struts2实现分页功能
1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO { public List<Person> queryB ...
- 5、Spring+Struts2+MyBatis+分页(mybatis无代理)增删改查
1.创建如下项目结构 2.在src下的com.entity包下创建Dept.java package com.entity; /** * 部门表 * @author Holly老师 * */ publ ...
- struts2+hibernate(分页实现)
//Dao类中实现了list集合和pagetotal方法 package zjf.strhib.Dao; import java.util.ArrayList; import java.util.Li ...
- struts2的分页标签
1.准备tld文件 <?xml version="1.0" encoding="UTF-8" standalone="no"?> ...
- SSH:Struts2.2+Hibernate3.6+Spring3.1分页示例[转]
参考资料 1 ssh分页(多个例子) http://useryouyou.iteye.com/blog/593954 2 ssh2分页例子 http://459104018-qq-com.iteye. ...
- pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
java 后台代码实现分页 demo 实力 自己写的 标签分页 package com.cszoc.sockstore.util; import java.util.HashMap;import ja ...
- 用Hibernate和Struts2+jsp实现分页查询、修改删除
1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...
- struts2+spring+hibernate 实现分页
在这里要感谢下这位博友发表的博文 http://www.blogjava.net/rongxh7/archive/2008/11/29/243456.html 通过对他代码的阅读,从而自己实现了网页分 ...
- 分页进阶--ajax+jquery+struts2
按照上次的分页逻辑,分页查询的业务大概需要几个“零件”:1.当前页:2.总页数:3.跳转页.后端需要处理的是:按照传送过来请求的页码返回相应地数据,并且接受初始化参数的请求:总页码.第一页的数据. 使 ...
随机推荐
- linux ----Inode的结构图
http://www.ruanyifeng.com/blog/2011/12/inode.html 先看看Inode的结构图 再来了解一下文件系统如何存取文件的 1.根据文件名 ...
- vi模式
保存命令 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件 ...
- WPF RichTextBox滚动条自动滚动实例、文本自动滚动实例
说明:1.后台代码添加测试 数据 2.使用 richTextBox.ScrollToVerticalOffset()方法,滚动竖直方向滚动条位置 3.使用定时器DispatcherTimer,修改页面 ...
- EF FluentAPI映射一对多 关系时候报错
提示很明显,不可为空的外键为空了,但是 问题是,我只是初始化 关系映射而已:见代码 public ColumnsCategoryMapConfiguration() { ToTable("C ...
- for循环,如何结束多层for循环
采用标签方式跳出,指定跳出位置, a:for(int i=0;i<n;i++) { b:for(int j=0;j<n;j++) { if(n=0) { break a; } } }
- angularjs 遇到Error: [$injector:unpr] Unknown provider: tdpicnews-serviceProvider <- tdpicnews-service <- tdpic-controller 错误
define(['modules/tdpic-module', 'services/news-service', 'utilities/cryto'], function (app) { 'use s ...
- 显示scrollbar
修改CSS overflow的值 overflow: 参考MDN 例子: overflow: auto or scroll
- Java循环性能随笔
for iterator做迭代循环性能最好 然后是foreach 然后是提前声明好变量的for循环 最后是每次都要计算集合size的for package test; import j ...
- 通过移位与或非运算获取整形最大值,最小值,以及获取输入的int类型整数的二进制表示
以上是最终效果 实现类: package com.corejava.chap02; public class IntBin { private int value; public IntBin(int ...
- python sklearn模型的保存
使用python的机器学习包sklearn的时候,如果训练集是固定的,我们往往想要将一次训练的模型结果保存起来,以便下一次使用,这样能够避免每次运行时都要重新训练模型时的麻烦. 在python里面,有 ...