java的jsp如何分页显示查询结果呢?

2025-02-22 12:39:34
推荐回答(5个)
回答1:

//分页类

public class Pager {
private int pageNow = 1;//
private int pageSize = 7;//
private int totalPage;//
private int totalSize;//

public Pager(int pageNow, int totalSize) {
this.pageNow = pageNow;
this.totalSize = totalSize;
}

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 getTotalPage() {

totalPage = getTotalSize() / getPageSize();
if (totalSize % pageSize != 0)
totalPage++;
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public int getTotalSize() {
return totalSize;
}

public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}

public boolean isHasFirst() {

if (pageNow == 1)
return false;
else
return true;
}

public void setHasFirst(boolean hasFirst) {
}

public boolean isHasPre() {
if (this.isHasFirst())
return true;
else
return false;
}

public void setHasPre(boolean hasPre) {
}

public boolean isHasNext() {
if (isHasLast())
return true;
else
return false;
}

public void setHasNext(boolean hasNext) {
}

public boolean isHasLast() {
if (pageNow == this.getTotalPage())
return false;
else
return true;
}

public void setHasLast(boolean hasLast) {
}
}
//service层
public class PageService {
@SuppressWarnings("unchecked")
public List list(int pageNow, int pageSize, String hql) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
List objects;
Query query = session.createQuery(hql);
query.setFirstResult(pageSize * (pageNow - 1));
query.setMaxResults(pageSize);
objects = query.list();
tx.commit();
return objects;
}
}
//在action中调用
public String listUser() {
String hql = "from Userinfo u";
if (ps.list(pageNow, pageSize, hql) != null) {
userinfos = (List) ps.list(pageNow, pageSize, hql);
Map request = (Map) ActionContext
.getContext().get("request");
Pager page = new Pager(this.getPageNow(), us.getUserSize());
request.put("userinfos", userinfos);
request.put("page", page);
return Action.SUCCESS;
} else {
return Action.LOGIN;
}
}
//jsp中


  
     
    邮箱
    密码
    权限
    
    
  
  
  
    
    
      
        
       
    
    
    value="#oneUser.email" />
    
    value="#oneUser.password" />
    
    
    
         普通用户
    
    
         管理员
    

   
    ' class="STYLE5">删除|
    &pageNow=' target="_self" class="STYLE5">修改
  
  
  
  
    
      
    
      
         
        
        ' target="_self" class="STYLE3" >上一页
        
        
         上一页
        

       
        " target="_self" class="STYLE3">下一页
        
       
        " target="_self" class="STYLE3">下一页
        

        " target="_self" class="STYLE3">尾页
      
    
  


这是采用struts2+hibernate 做的,你可以参考一下

回答2:

  分页显示一般有两种实现方式:业务层分页、数据库层分页(以下会用到两个参数,提前说明下 page:请求第几页,size:每页显示多少条)

  业务层分页:从数据库取出所有数据,然后通过传过来的page和size对所有数据截取,比如一共查了100条数据,保存在list里面,要求查询第2页,每页显示10条,则可以通过list属性,取100条数据 中的第11条到第20条,可通过遍历实现。

  数据库层分页:数据库都会有分页函数(mysql 是limit函数,sqlServer是row_number()函数,可自行百度下)该方法是通过传过来的page和size在查询数据库时就开始分页,以mysql为例,查询第2页,每页显示10条,则sql语句是 ”select * from XX limit 10,10“(第一个10表示从下标为10开始查,第二个10是共读取10条)

  性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来

回答3:

你可以写一个pageBean

package cn.oceanlive.pager.domain;

import java.util.List;

public class PageBean {
    private int pc;// 当前页码
    private int tr;// 总记录数
    private int ps;// 每页记录数
    private String url;// 基本url(这个你可以不用要,当然要,也可以)
    private List beanList;// 当前页记录

    public PageBean(int pc, int tr, int ps) {
        this.pc = pc;
        this.tr = tr;
        this.ps = ps;
    }

    // 返回当前页首行的下标
    public int getIndex() {
        return (pc - 1) * ps;
    }

    // 返回总页数
    public int getTp() {
        int tp = tr / ps;
        if (tr % ps != 0)
            tp++;
        return tp;
    }

    public PageBean() {
    }

    public int getPc() {
        return pc;
    }

    public void setPc(int pc) {
        this.pc = pc;
    }

    public int getTr() {
        return tr;
    }

    public void setTr(int tr) {
        this.tr = tr;
    }

    public int getPs() {
        return ps;
    }

    public void setPs(int ps) {
        this.ps = ps;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public List getBeanList() {
        return beanList;
    }

    public void setBeanList(List beanList) {
        this.beanList = beanList;
    }
}

回答4:

思路是:写个Page类,里面有 总页数,页面容量,当前页;通过页面容量和当前页,就能算出分页查询的起始页和结束页,再写个数据对象继承Page类,把数据对象在jsp和Controller来回传就行了。前端分页可以上网搜插件。kkpager很不错

回答5:

你是在后台一次性查询数据然后再前端分页展示是吧。如果是这样建议你使用Jquery 的插件。jquery的Datetable就可以。