完整的代码不必要,只需要分页这一块,其它不要,看着累
最好有很好的层次性,这要便于修改和理解,action、service、dao层,util包
就用hibernate的分页,我就是不知道怎么把参数传到Action里,看了许多,不知道page类怎么
jsp页面怎么写。
想看下大神怎么做的,学习下,谢谢。

解决方案 »

  1.   


    pagebean:
    public class PageBean {private List list;//要返回的某一页的记录列表 private int allRow; //总记录数
    private int totalPage;//总页数
    private int currentPage;//当前页
    private int pageSize;//每页记录数private boolean isFirstPage;//是否为第一页
    private boolean isLastPage;//是否为最后一页
    private boolean hasPreviousPage;//是否有前一页
    private boolean hasNextPage;//是否有下一页public List getList() {
    return list;
    }
    public void setList(List list) {
     this.list = list;
    }
    public int getAllRow() {
    return allRow;
    }
    public void setAllRow(int allRow) {
    this.allRow = allRow;
    }
    public int getTotalPage() {
    return totalPage;
    }
    public void setTotalPage(int totalPage) {
     this.totalPage = totalPage;
    }
    public int getCurrentPage() {
    return currentPage;
    }
    public void setCurrentPage(int currentPage) {
     this.currentPage = currentPage;
    }
    public int getPageSize() {
     return pageSize;
    }
    public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
    }/** *//**
    * 初始化分页信息
    */
    public void init(){
    this.isFirstPage = isFirstPage();
     this.isLastPage = isLastPage();
     this.hasPreviousPage = isHasPreviousPage();
     this.hasNextPage = isHasNextPage();
    }/**
    * 以下判断页的信息,只需getter方法(is方法)即可
    * @return
    */public boolean isFirstPage() {
     return currentPage == 1;// 如是当前页是第1页
    }
    public boolean isLastPage() {
     return currentPage == totalPage;//如果当前页是最后一页 
    }
    public boolean isHasPreviousPage() {
     return currentPage != 1;//只要当前页不是第1页
    }
    public boolean isHasNextPage() {
     return currentPage != totalPage;//只要当前页不是最后1页 
    }/**
    * 计算总页数,静态方法,供外部直接通过类名调用
    * @param pageSize 每页记录数
    * @param allRow 总记录数
    * @return 总页数
    */
    public static int countTotalPage(final int pageSize,final int allRow){
    int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;
    return totalPage;
    }/**
    * 计算当前页开始记录
    * @param pageSize 每页记录数
    * @param currentPage 当前第几页
    * @return 当前页开始记录号
    */
    public static int countOffset(final int pageSize,final int currentPage){
     final int offset = pageSize*(currentPage-1);
     return offset;
    }/**
    * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
    * @param page 传入的参数(可能为空,即0,则返回1)
    * @return 当前页
    */
    public static int countCurrentPage(int page){
     final int curPage = (page==0?1:page);
     return curPage;
    }
    }
    op:
     /**
    * 分页查询
    * @param currentPage 当前第几页
    * @param pageSize 每页大小
    * @return 封闭了分页信息(包括记录集list)的Bean
    */
        public PageBean queryForPage(int pageSize,int page){
             if(page==0)
             {
             page=1;
             }
             final String hql = "from TCmcsMessage m where m.state=1 and m.fparentid='0'  order by m.fid desc";//查询语句
             int allRow = messagedao.getAllRowCount(hql);//总记录数 
             int totalPage = PageBean.countTotalPage(pageSize,allRow); //总页数
             final int offset = PageBean.countOffset(pageSize,page);//当前页开始记录
           final int length = pageSize;//每页记录数
       final int currentPage = PageBean.countCurrentPage (page);
     List<TCmcsMessage> list = messagedao.queryForPage (hql,offset,length);//"一页"的记录

             //把分页信息保存到Bean中
             PageBean pageBean = new PageBean();
     pageBean.setPageSize(pageSize);
             pageBean.setCurrentPage(currentPage);
     pageBean.setAllRow(allRow);
     pageBean.setTotalPage(totalPage);
     pageBean.setList(list);
     pageBean.init();
     return pageBean;
    }
    action:
    public class TCmcsMessageAction {
    private int page=0;//第几页
    private PageBean pageBean; //包含分布信息的bean
    public int getPage() {
    return page;
    }
    public void setPage(int page) {
    this.page = page;
    }
    public PageBean getPageBean() {
    return pageBean;
    }
    public void setPageBean(PageBean pageBean) {
    this.pageBean = pageBean;
    }
    public String MessageList()
    {
    //分页的pageBean,参数pageSize表示每页显示记录数,page为当前 页
     this.pageBean = messageop.queryForPage(4, page);
     return "messagelist";
    }
    }
    jsp:
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%
    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>留言列表</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
      </head>
      <body>
      <table width="100%" border="0" cellpadding="0" cellspacing="0">
         <s:iterator value="pageBean.list">
          <ul>
      <div style="float: left;"><s:property value="fname"/></div>
       <div style="text-align: left;"><s:property value="content"/></div>
       <div style="float: left;"><s:property value="fcreatedate"/></div>
         </ul>
       </s:iterator>
      </table>
      <div id="ctl00_DefaultContent_ucMessageList1_spBottom" style="width:100%;">
    <table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td>共<s:property value="pageBean.allRow"/>条记录共<s:property value="pageBean.totalPage"/> 页当前第<s:property value="pageBean.currentPage"/> 页</td>
    <td>
    <s:if test="%{pageBean.currentPage == 1}">第一页 上一页</s:if>
    <s:else>
    <a href="<c:url value="/npermission/messageaction.cv"/>?method:MessageList&page=1">第一页</a>
    <a href="<c:url value="/npermission/messageaction.cv"/>?method:MessageList&page=${pageBean.currentPage-1}">上一页</a>
    </s:else>
    <s:if test="%{pageBean.currentPage != pageBean.totalPage}">
    <a href="<c:url value="/npermission/messageaction.cv"/>?method:MessageList&page=${pageBean.currentPage+1}">下一页</a>
    <a href="<c:url value="/npermission/messageaction.cv"/>?method:MessageList&page=${pageBean.totalPage}">最后一页</a>
    </s:if>
    <s:else>
    下一页 最后一页
    </s:else>
    </td>
    </tr>
    </table>
      </div>
      </body>
    </html>不知道能看明白吗?不明白问吧
      

  2.   

    谢谢你的代码,白天没时间,现在我已经能够分页了,但是我把你jsp页面里的s标签换成了c标签
    为什么我项目里不能用s标签啊,项目发布后运行总是在s标签处提示错误?
    我是初学者,求解释!
      

  3.   

    加入jar包(standard.jar和jstl.jar),引入jstl标签,应该会吧!判断那块改为                     <c:if test="${pr.page.hasPrePage}">
               
                               </c:if>

                                <c:if test="${pr.page.hasNextPage}">

                                </c:if>
    等你结贴给分呢,哈哈!
      

  4.   

     你jsp里有没有引入struts标签库?   上面加一句<%@taglib prefix="s" uri="/struts-tags"%>
      

  5.   

    错了错了,应该是<c:if test="${pg.hasPrePage}">
       
      </c:if>  <c:if test="${pg.hasNextPage}">  </c:if>
    试试吧
      

  6.   

    Action里的Page page=new Page();
    page.setCurrentPage(currentPage);
    page.setEveryPage(10);其中page.setCurrentPage(currentPage);
    里的currentPage从哪里取的值
      

  7.   

    从页面取呀,你请求一个一页,他根据参数名称自动装配的呀,你要是不懂先看看struts2是怎麽回事吧!有问题发邮件给我,这样回复不太爽。
      

  8.   

    亲,可以发个Struts2+Hibernate 实现数据分页
    的实例文件(源码)给我吗?邮箱为[email protected]
    谢谢