关于SSH中实现分页,请教一下。

加嘞个油 2011-12-31 04:34:53
写了个小项目,数据不多,现在是直接在action中用service调用return hibernateTemplate.find("from SNews order by news_id") ;然后JSP显示LIST结果。

数据多了这样很不方便,想用个分页。

我的思路是:查询结果时,默认显示第一页,默认比如显示10条数据,然后点 下一页 给后台传一个参数,然后查到第二页数据。

具体代码不会写了。。可否指点一二。
...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenki520 2012-02-06
  • 打赏
  • 举报
回复
		public Page queryForPage(int pageSize, int page)
{
final String hql = "from SNews";// 查询语句
int allRow = this.allNews().size();
int totalPage = Page.countTotalPage(pageSize, allRow);// 总页数
final int offset = Page.countOffset(pageSize, page);// 当前页开始记录
final int length = pageSize;// 每页记录数
final int currentPage = Page.countCurrentPage(page);
List<SNews> list = this.findAllNews(hql,offset,length);// "一页"的记录
//设置一个页面list
List pageList = new ArrayList();
//把记录添加到list中
for (int i = 0; i < totalPage; i++)
{
pageList.add(i, i + 1);
}
Page pageBean = new Page();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.setPageList(pageList);
//System.out.println(pageBean.getAllRow());
pageBean.init();
return pageBean;
}



	     	String page =ServletActionContext.getRequest().getParameter("page");
String[] pages = request.getParameterValues("pageInput");
List pagelist = new ArrayList();
pageBean = this.service.queryForPage(5,Integer.parseInt(page));
newsList = pageBean.getList();
}
  • 打赏
  • 举报
回复
hibernate分页很方便的,去网上下载个简单例子一看就明白了嘛。
colie_li 2012-01-01
  • 打赏
  • 举报
回复
前几天做的分页显示,测试没问题,楼主参考下吧



public class Serch extends ActionSupport
{
private String bid;
private String bname;
private int number;
private int k;//储存最大页面数
private int pageNow=1; //页码数,初始为1
private int pageSize = 5 ; //页面行数
private int intRowCount;//总行数
private int intPageCount;//总页数
private int lastPage;
private int p=1;


.....set/get;
public String execute() throws Exception
{
List list=new List();
java.util.List L=new ArrayList();
L=list.list();
intRowCount=L.size();
System.out.println("链表的长度:"+L.size());
if(L.size()%pageSize==0) //判断分多少页
this.lastPage=L.size()/pageSize;
else
this.lastPage=L.size()/pageSize+1;

this.setIntPageCount(this.lastPage);//存入总页数

if(this.pageNow<1)//如果当前页码是第一页在点第一页的时候也跳转到第一页
this.pageNow=1;
if(this.pageNow>this.lastPage)//同理只不过是最后一页
this.pageNow=this.lastPage;
/*
*
* 假设取其中20-25条
*
*
*
*/
int startIndex=(this.pageNow-1)*pageSize;//截止条目开始,第20条
int endIndex=startIndex+pageSize;//截止条目结束 第25条

if(endIndex>=L.size())
endIndex=L.size();

L= L.subList(startIndex, endIndex);
System.out.println("执行");

ActionContext.getContext().put("list", L);
return "success";
}
@Override
public void validate() {
// TODO Auto-generated method stub
super.validate();
}


}
前台显示:


共<s:property value="intRowCount"/>记录  
共<s:property value="intPageCount"/>页  
第<s:property value="pageNow"/>页  
<s:url action="Serch.action" id="url">
<s:param name="pageNow">
<s:property value="1" />
</s:param>
</s:url>
<s:a href="%{url}">首页</s:a>   

<s:url action="Serch.action" id="url">
<s:param name="pageNow">
<s:property value="%{pageNow-1}" />
</s:param>
</s:url>
<s:a href="%{url}">上一页</s:a>   


<s:url action="Serch.action" id="url">
<s:param name="pageNow">
<s:property value="%{pageNow+1}" />
</s:param>
</s:url>
<s:a href="%{url}">下一页</s:a>   

<s:url action="Serch.action" id="url">
<s:param name="pageNow">
<s:property value="lastPage" />
</s:param>
</s:url>
<s:a href="%{url}">尾页</s:a>













对java有感觉 2012-01-01
  • 打赏
  • 举报
回复

Criteria ct = getSession().createCriteria(TbBook.class);
ct.addOrder(Order.asc("bookId"));
ct.setFirstResult(start);
ct.setMaxResults(end);
return ct.list();
分页的例子
jmonian 2011-12-31
  • 打赏
  • 举报
回复
挺想帮你的。刚用SSH做过分页。不过是老师给的文档。里面有具体步骤。不知道怎么跟你说哈。帮你顶个吧。
小小_happly 2011-12-31
  • 打赏
  • 举报
回复
如果是要显示全部信息的话,最好只查一次,然后可以在Action中分页,每次点下一页的时候就直接从List中取数据,不用在查数据库,只要你会算算术就行了。

如果是找数据,不确定是在哪一页的话可以直接用Hibernate提供的分页方法,简单。
加嘞个油 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yyy269954107 的回复:]
直接用hibernate自带的分页方法
public List<T> selectByPage(final String hql, final int pageNumber,
final int pageSize) {

return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object do……
[/Quote]

hql语句就还是 from SNews order by news_id 这样吧。

pageNumber,pageSize 这些在JSP页面直接传给后台就OK了?一会试试。
加嘞个油 2011-12-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wula0010 的回复:]
hibernate 的criteria和query都有setFirstResult和setFetchSize方法,很简单好用........
[/Quote]

可以举个例子吗 。。。谢谢
昆卡卡 2011-12-31
  • 打赏
  • 举报
回复
直接用hibernate自带的分页方法
public List<T> selectByPage(final String hql, final int pageNumber,
final int pageSize) {

return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException,
SQLException {

return (List<T>) s.createQuery(hql)
.setFirstResult((pageNumber - 1) * pageSize)
.setMaxResults(pageSize).list();
}
});
}
下一页什么的传对应的pageNumber,pageSize就可以了,如果你想很多页面要用的话,当然页面你还需要个分页标签。
wula0010 2011-12-31
  • 打赏
  • 举报
回复
hibernate 的criteria和query都有setFirstResult和setFetchSize方法,很简单好用........
加嘞个油 2011-12-31
  • 打赏
  • 举报
回复
2012前求解决 - -

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧