读书人

下上分页如何实现

发布时间: 2012-12-27 10:17:10 作者: rapoo

上下分页怎么实现
大家伙谁能给我具体的说说ssh的分页技术是怎么实现的,看得我好迷茫啊。
本来就对分页不是怎么懂。
[解决办法]
ssh是三个框架,你想问的是哪个分页?
[解决办法]
看看Hibernate的数据方言类的源代码
[解决办法]
三个结合当然用Hibernate带的分页啦!
[解决办法]
Session s=hibernateTemplate.getSessionFactory().getCurrentSession();
s.beginTransaction();
Query query=s.createQuery(hql);
query.setFirstResult(pagesize); //分页查询
query.setMaxResults(pagelength);
List<Install> installs=query.list();
s.getTransaction().commit();
MySession.getSession().put("pagenum",installs.size());

我这么做的 pagesize每页的第一条 pagelength为每页显示条数 页面中通过当前显示条数+1是否大于 pagelength来判断是否还有下一页,判断是否有上一页就判断下pagesize是否为0
[解决办法]
继承HibernateDaoSupport类,
如:
public List<Object> findObjectList(final int page,final int pageSize){
List<Object> list=this.getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria=session.createCriteria(Object.class);
Criterion criterion=Restrictions.eq("role.roleId",id);
criteria.add(criterion);
criteria.setFirstResult((page-1)*pageSize);//设置每页显示的第一条记录
criteria.setMaxResults(pageSize);//设置每页显示的最大记录数
List list=criteria.list();
session.close();
return list;

});

}

/**
* 查询最大记录数
*
*/
public int pageCount(){
String hql = "select count(*) from XXX";
List list = this.getHibernateTemplate().find(hql);
Number count = 0;
if (list != null && list.size() != 0) {
count = (Number) list.get(0);
}
return count.intValue();
}


/**
* 求出最大页面maxPage
*/
public int maxPage(Integer pageSize, Integer pageCount){
int maxPage = 0;
if (pageCount % pageSize == 0) {
maxPage = pageCount / pageSize;
} else {
maxPage = pageCount / pageSize + 1;
}
return maxPage;
}
[解决办法]
1:首先你先写一个PageUtil.java的分页组件
2:然后写一个page_list.jsp的分页页面组件
3:在baseDao中写一个得到总个数和分页查询的函数
4:在你要分页的模块dao中实现baseDao的方法
5:在service层实现模块dao的分页方法,你就可以在自己的action中实现分页了

具体实现如下:
1:PageUtil.java
public class PageUtil {
private int currentPage;
private int pageSize;
private int totalCount;
private int totalPage;
……get() set()方法略
public int getTotalPage()
{
return totalPage;
}
public void setTotalPage(int totalCount)
{


if(totalCount%pageSize==0)
{
this.totalPage=totalCount/pageSize;
}
else
{
//??????? ?? ?????С????????????
this.totalPage=totalCount/pageSize+1;
}
}

2:page_list.jsp(先省略)

3:在baseDao中实现
//得到总记录数
public int count(String hql) {
return super.getHibernateTemplate().find(hql).size();
}
//分页的实现
public List<?> searchByPage(PageUtil page, String hql) {

Query query = super.getHibernateTemplate().getSessionFactory().openSession().createQuery(hql); //最好用OpenSession(),必须关闭,不和当前线程绑定。getCurrentSession()自动关闭,和当前线程绑定。
query.setFirstResult((page.getCurrentPage() - 1) * page.getPageSize());
query.setMaxResults(page.getPageSize());
List<?> list = query.list();
return list;
}

4:比如我要在user模块实现分页,那么我的userDaoImpl就要这么写了
//得到总记录数
public int getCount(String hql) {
// TODO Auto-generated method stub
return super.count(hql);
}

//分页显示
public List<User> searchByPage(PageUtil page,String hql){
return ( List<User>)super.searchByPage(page, hql);
}

5:在service层你要实现userDao里的方法了,注入userDao之后,用userDao里面的分页方法
//得到总记录数
public int getCount() {

return userdao.getCount("from User");
}
//分页显示
public List<User> searchByPage(PageUtil page) {
String hql="from User";
return (List<User>)userdao.searchByPage(page,hql);
}

6:在你的action层实现

int pageSize=3;//页面的大小为3
int currentPage=1;//当前页为1
try{ //从page_list.jsp中传回来的cp页
currentPage = Integer.parseInt(request.getParameter("cp"));

}catch(Exception e){}
int totalCount=userService.getCount();//得到总数
PageUtil page=new PageUtil();
page.setCurrentPage(currentPage);
page.setPageSize(pageSize);
page.setTotalCount(totalCount);
page.setTotalPage(totalCount);

List<User> ulist=userService.searchByPage(page);

这样你查询出来的数据就会在页面上按页显示了,如果你还有什么地方不能实现,可以加我QQ934480468

[解决办法]

public void listByPage(Stuinfo stu, PageResult pageResult) {
String hql = "select s from Stuinfo as s where 1=1 ";
if (isNotNullOrEmpty(stu.getSname())) {
hql += " and s.sname like '%" + stu.getSname() + "%' ";
}
if (isNotNullOrEmpty(pageResult.getOrderBy())) {
hql += " order by " + "s." + pageResult.getOrderBy() + " "
+ pageResult.getSort();
} else {
hql += "order by s.id";
}
super.listByPage(hql, pageResult);
}

public boolean isNotNullOrEmpty(String c) {
if (c == null
[解决办法]
"".equals(c)) {
return false;
} else {
return true;
}



这个是strust1实现的、我已经把方法打成jar包了。 页面上只需要<page:pager form="stuinfoForm" /> 一下就全部显示出来了

读书人网 >Java Web开发

热点推荐