我看了网上好多分页想法,不过感觉有点复杂,下面的是我的想法,还在测试中
搞了好多了 我就怕 我的想法都是错得//每页显示5个 输入页面查询
public List ListUsers(int pageNo) {
// TODO Auto-generated method stub
Session session=this.getSession();
Query query=session.createQuery("from Users u order by u.usId asc");
int pageSize=5;
int firstResultIndex=pageSize*(pageNo-1);
query.setFirstResult(firstResultIndex);
query.setMaxResults(pageSize);
return query.list();
}
//总页面数
public int getCount() {
// TODO Auto-generated method stub
List list=this.getHibernateTemplate().find("select count(*) from Users");
int count=((Integer)list.iterator().next()).intValue();
return count;
}网页的话采用<c:foreach >循环输出
首页 我是直接放了一个参数1进去然后就是 用按钮 上一页 下一页 首页 末页 跳至**页  每个按钮都调用public List ListUsers(int pageNo) 
在这些按钮中设置动态参数。我网页做的不好 就想偷懒用别人的网页结果 无法用doom取出网页参数值,更加设置不了参数传入 以致按钮总是无法调用函数将参数传至windows.localtion。
但直接放置静态参数 按钮是可以执行的
改网页去,坐等回复。谁有比较简便的SSH分页 也可以给我指导下 最好是源码

解决方案 »

  1.   

    pageNo得不到那怎么能知道显示的是第几页啊
      

  2.   

    <%=request.getAttribute("count")%>
    可以这样在网页中输出这个值 
      

  3.   

    window.location="url"  怎么传动态参数进url中         除了下面这种还有么           <a href="food.do?op=listOnly&id=${food.foodId}"> 我没页码没设bean值呀。。
      

  4.   


    import java.util.List;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;/**
     * @des 分页公用类
     * @author tao
     * @date 2011.05.30
     */
    public class PageBean extends HibernateDaoSupport {
    private int curPage = 1; // 当前是第几页
    private int maxPage; // 一共有多少页
    private int maxRowCount; // 一共有多少行
    public int rowsPerPage = 5; // 每页多少行
    private String hql; // hql语句
    public PageBean() {
    } /**
     * @des 分页
     */
    public List findByPage(String hql) {
    List list = null;
    int First = (this.getCurPage() - 1) * this.rowsPerPage;
    list = getSession().createQuery(hql).setFirstResult(First)
    .setMaxResults(rowsPerPage).list();
    return list;
    } /**
     * @des 获取总页数
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public int getPageBean(String hql) {
    List list = getSession().createQuery(hql).list();
    this.setMaxRowCount(list.size());
    if (this.maxRowCount == 0) {
    this.maxPage = 1;
    } else {
    if (this.maxRowCount % this.rowsPerPage == 0) { // 根据总行数计算总页数
    this.maxPage = this.maxRowCount / this.rowsPerPage;
    } else {
    this.maxPage = this.maxRowCount / this.rowsPerPage + 1;
    }
    }
    return this.getMaxPage();
    } /******************************************************** get/set ***********************************/ public String getHql() {
    return hql;
    } public void setHql(String hql) {
    this.hql = hql;
    } public int getCurPage() {
    return curPage;
    } public void setCurPage(int curPage) {
    this.curPage = curPage;
    } public int getMaxPage() {
    return maxPage;
    } public void setMaxPage(int maxPage) {
    this.maxPage = maxPage;
    } public int getMaxRowCount() {
    return maxRowCount;
    } public void setMaxRowCount(int maxRowCount) {
    this.maxRowCount = maxRowCount;
    } public int getRowsPerPage() {
    return rowsPerPage;
    } public void setRowsPerPage(int rowsPerPage) {
    this.rowsPerPage = rowsPerPage;
    }
    }
    以前自己学习的时候写得一个分页类,和你的挺像的,需要完善的地方很多,现在进公司发现以前自己写得分页和项目经理写得比起来差好多,呵呵,hql语句就是传你要根据哪个表分页“from bean名字 where....”
    页面要给action传个当前页就成了
      

  5.   

    List list=this.getHibernateTemplate().find("select count(*) from Users");这个直接返回count类型的不行吗?
      

  6.   


    var   obj=document.getElementById("pageNo").value;
       alert(obj);
            window.location="users.do?op=ListUsers&pageNo="+obj;
    }
      可以从页面上 输出查询的页码
    在把count 取出来计算末页 下一页 上一页 分页就完成了。。基础没学好 我就是困在这个
    var   obj=document.getElementById("pageNo").value;
       alert(obj);
            window.location="users.do?op=ListUsers&pageNo="+obj;
     
      

  7.   

    public class NewsDaoImpl extends  BaseDao implements NewsDao {-------------------------->>>>Oracle 的分页方式
    Connection conn=null;
    PreparedStatement pstmt=null;
    ResultSet res=null;
    public int getCount() {//获取总页数
    int count=0;
    String sql="select count(*) from news";
    try {
    getConn();
    pstmt=conn.prepareStatement(sql);
    res=pstmt.executeQuery();
    if(res.next()){
    count=res.getInt(1);
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }finally{
    closeAll(conn, pstmt, res);
    }
     return count;
    } public int getTotalPages(int count, int pageSize) {
    int totalpages=0;
    totalpages=(count%pageSize==0)?(count/pageSize):(count/pageSize+1);
    return totalpages;
    } public List<News> display(String sql) {
    List<News> list=new ArrayList<News>();
    News news=null;
    try {
        getConn();
    pstmt=conn.prepareStatement(sql);
    res=pstmt.executeQuery();
    while(res.next()){
    news=new News();
    news.setNid(res.getInt("nid"));
    news.setNtid(res.getString("ntid"));
    news.setNtitle(res.getString("ntitle"));
    news.setNauthor(res.getString("nauthor"));
    news.setNcreatedate(res.getString("ncreatedate"));
    news.setNpicpath(res.getString("npicpath"));
    news.setNcontent(res.getString("ncontent"));
    news.setNmodifydate(res.getString("nmodifydate"));
    news.setNsummary(res.getString("nsummary"));
    list.add(news);
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }finally{
       closeAll(conn, pstmt, res);
    }
    return list;
    }
    <%
     NewsDao newsDao=new NewsDaoImpl();
     int pageSize=3;
     int totalpages=newsDao.getTotalPages(newsDao.getCount(),pageSize);  //调用方法,传入总页数和一共显示的几条信息
     String currentPage=request.getParameter("pageIndex");
     if(currentPage==null){
      currentPage="1";
     }
     int pageIndex=Integer.parseInt(currentPage);
     if(pageIndex<1){
      pageIndex=1;
     }else if(pageIndex>totalpages){
      pageIndex=totalpages;
     }
    String  sql="select * from (select rownum as r,t.* from (select news.* from news order by nid ) t where rownum<="+pageSize*pageIndex+")where r>"+pageSize*(pageIndex-1); 
    List list=newsDao.display(sql);
    %>第二分页方法:------------------------------------------------------->>>sql  server
    package com.book.operator;import java.sql.*;
    import java.util.*;import com.book.dao.*;
    import com.book.entity.Book;public class Operator {
    Connection conn;
    PreparedStatement pstmt;
    ResultSet rsSet;
    private int pageSize = 5;
    private int rowCount = 0;
    private int pageCount = 0; public int getAllPages(int pageSize) {
    try {
    String sql = "use  ebook  select count(*) from  bookInfo";
    conn = BaseDao.getConn();
    pstmt = conn.prepareStatement(sql);
    rsSet = pstmt.executeQuery();
    if (rsSet.next()) {
    rowCount = rsSet.getInt(1);
    }
    if (rowCount % pageSize == 0) {
    pageCount = rowCount / pageSize;
    } else {
    pageCount = rowCount / pageSize + 1;
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    BaseDao.closeAll(conn, pstmt, rsSet);
    }
    return pageSize;
    }
     
    public List<Book> getBookList(int pageNow, int pageSize) {
    List<Book> list = new ArrayList<Book>();
    try {
    conn = BaseDao.getConn();
    String sql = " select top " + pageSize + " * from bookInfo where bookId  not in (select top " + pageSize * (pageNow-1) + " bookId  from  bookInfo)";
    pstmt = conn.prepareStatement(sql);
    rsSet = pstmt.executeQuery();
    while (rsSet.next()) {
    Book book = new Book();
    book.setBookName(rsSet.getString("bookName"));
    book.setBookType(rsSet.getString("bookType"));
    book.setBookStatus(rsSet.getString("bookStatus"));
    list.add(book);
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {
    BaseDao.closeAll(conn, pstmt, rsSet);
    }
    return list;
    } <%
      int pageNow =1;
      int upPage=pageNow;
      int downPage=pageNow; 
      String   CurrentPages=request.getParameter("pageIndex");
      if(pages!=null)
      { pageNow=Integer.parseInt(CurrentPages); }
      Operator  oper=new Operator(); 
      List list=oper.getBookList(pageNow,5);
      if(oper.getBookList(pageNow+1,5).size()>0)
      {
                                                                         downPage=pageNow+1; }
                                                                      else{
                                                                        downPage = pageNow; }
      if(pageNow>1)
      {  upPage=pageNow-1;} 
         for(int i=0;i<list.size();i++)
         {
         Book  book=(Book)list.get(i);
        %>
    ---------------------->>>>>应用
    (oracle数据库分页)
    String sql="select * from (select  rownum  as r,t.* from (select news.* from news order by ncreatedate  desc) t )  where  rownum<=10 ")where  r> 5"  >>>>>String  sql="select * from (select rownum as r,t.* from (select news.* from news order by nid ) t where rownum<="+pageSize*pageIndex+")where r>"+pageSize*(pageIndex-1); 
    ------------------------------------
    (Sql server数据库分页)
    String sql = "use ebook select top " + pageSize + " * from bookInfo where bookId  not in (select top " + pageSize * (pageNow-1) + " bookId  from  bookInfo)";
    String sql="select  top   "+ pageSize  +"  * from  user where   id  not  in (select  top  " +pageSize  * (pageNew-1 )+ " id from user  )   "; 
      

  8.   

    果断pagetagelib分页组件,直接传几个参数到页面就OK啦,实现很方便简单的.
      

  9.   


    import java.util.ArrayList;
    import java.util.List;/**
     * 
     * 翻页
     * @author lgyne
     *
     */
    public class TurnPage
    {
    @SuppressWarnings("rawtypes")
    private List totalRecord;//总记录数据

    private int pagingNum = 10;//分页数(每一页多少条记录,默认是10)

    private int page = 1;//当前页(默认为第一页)
    /**
     * 总记录条数,其他参数默认
     * @param totalRecord -- 总记录条数
     */
    @SuppressWarnings("rawtypes")
    public TurnPage(List totalRecord)
    {
    this.totalRecord = totalRecord;
    } public List getTotalRecord()
    {
    return totalRecord;
    } public void setTotalRecord(List totalRecord)
    {

    this.totalRecord = totalRecord;
    } public int getPagingNum()
    {
    return pagingNum;
    } public void setPagingNum(int pagingNum)
    {

    this.pagingNum = pagingNum;
    } public void setPage(int page)
    {

    this.page = page;
    } /**
     * 总记录条数,分页数自定
     * @param totalRecord -- 总页数
     * @param pagingNum -- 分页数
     */
    @SuppressWarnings("rawtypes")
    public TurnPage(List totalRecord, int pagingNum)
    {
    this(totalRecord);

    this.pagingNum = pagingNum;
    } /**
     * 返回总共有几页
     * @return
     */
    public int getTotalPage()
    {
    int totalPage = 0;

    int temp = this.totalRecord.size()%this.pagingNum;

    if(temp == 0)
    {
    totalPage = this.totalRecord.size()/this.pagingNum;
    }else
    {
    totalPage = this.totalRecord.size()/this.pagingNum + 1;
    }

    return totalPage;
    }

    /**
     * 返回当前页数
     * @return
     */
    public int getPage()
    {
    return this.page;
    }

    /**
     * 上一页
     * @return
     */
    public int Back()
    {
    if(this.page == 1)
    {
    return this.page;
    }else
    {
    return this.page = this.page - 1;
    }
    }

    /**
     * 下一页
     * @return
     */
    public int Next()
    {
    if(this.page == this.getTotalPage())
    {
    return this.page;
    }else
    {
    return this.page = this.page + 1;
    }
    }

    /**
     * 跳转
     * @param page -- 跳转的页
     * @return
     */
    public int turnPage(int page)
    {
    if(page <= 1)
    {
    return this.page = 1;
    }else if(page >= this.getTotalPage())
    {
    return this.page = this.getTotalPage();
    }else
    {
    return this.page = page;
    }
    }

    /**
     * 返回当前页数据
     * @return
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public List getPageList(List list)
    {
    int pageStart = (this.page - 1) * this.pagingNum;

    ArrayList tempList = new ArrayList() ;

    for(int i = pageStart; i < pageStart + this.pagingNum; i++)
    {
    tempList.add(list.get(i));

    if(i + 1 == this.totalRecord.size())
    {
    break;
    }
    }

    return tempList;
    }自己做项目写的分页,传一个LIST 进去然后分页信息就出来了
      

  10.   

    这个不是很好,分页一般在数据库就分页这样效率高,如果有几万条,这个效率就低了,你可以去看下Java的数据库的一些API