list集合的分页

sharon_arron 2011-05-24 01:11:12
谁有完整的分页方法,已经查询出来的List,将其在页面上显示分页。注意,不是在sql语句中分页的,而是查出来的list之后,再将其在action中或者jsp中分页操作的。我只做过在dao类中,查询语句的时候将其分页,
Query query = session.createQuery(hql).setFirstResult(
currPage > 1 ? (currPage - 1) * pageSize : 0)
.setMaxResults(pageSize);我只这样做过哎,有没有别的方法啊,查出list之后分页的,帮帮忙哦
...全文
4183 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharon_arron 2011-05-29
  • 打赏
  • 举报
回复
谢啦各位,我还是在语句里分页了,因为确实数据量很大很大
wang1986614 2011-05-24
  • 打赏
  • 举报
回复
可以在结果集中分页显示,但是建议不要这么做,一旦数据量太大的话……
gongzhike 2011-05-24
  • 打赏
  • 举报
回复
这是定义的类:


package com.svse.util;

import java.util.ArrayList;
import java.util.List;

public class PageUtil
{
private int totalCount; //总行数
private int totalPage; //总页数
private int currentPage; //当前页数
private int lineSize; //每页几行

public PageUtil()
{

}

public PageUtil(int currentPage, int lineSize, int totalCount, int totalPage) {
super();
this.currentPage = currentPage;
this.lineSize = lineSize;
this.totalCount = totalCount;
this.totalPage = totalPage;
}

public int getTotalCount() {
return totalCount;
}

public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}

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 getLineSize() {
return lineSize;
}

public void setLineSize(int lineSize) {
this.lineSize = lineSize;
}


//设置总页数

public void setTotalPage()
{
//如果总行数整除每页的行数
if(this.getTotalCount()/this.getLineSize()==0)
{
this.totalPage=this.getTotalCount()/this.getLineSize();
}
else
{
this.totalPage=this.getTotalCount()/this.getLineSize()+1;
}
}

public List getPage(List list)
{
List list1=new ArrayList();

//找出分页后,当前页数的后一叶的最后一行是总共行数的第几行-----当前页数减一,乘以每页几行
int start=(this.getCurrentPage()-1)*this.getLineSize();

//找出分页后,最后一页的第一行数据是总共行数的第几行
int end=this.getCurrentPage()%this.getLineSize();
int end1=(this.getCurrentPage()-1)*this.getLineSize()+this.getTotalCount()%this.getLineSize();


//如果说,当前页数等于总页数 并且 总行数除以每页几行不能整除
if(this.getCurrentPage()==this.getTotalPage() && this.getTotalCount()%this.getLineSize()!=0)
{
for (int i = start; i < end1; i++)
{
list1.add(list.get(i));
}
}
else
{
for (int i = start; i <end; i++)
{
list1.add(list.get(i));
}
}

return list1;



}
}
gongzhike 2011-05-24
  • 打赏
  • 举报
回复
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{

UserDAO dao=new UserDAO();

List list=dao.findAll();

PageUtil util=new PageUtil();
util.setTotalCount(list.size());
util.setLineSize(3);
util.setTotalPage();


int currentpage=0;

//如果说,获取的为空
if(request.getParameter("pag")==null)
{
//则当前页数为1
currentpage=1;
}
else
{
//否则,当前页数等于获取的数字
currentpage=Integer.parseInt(request.getParameter("page"));

//如果,当前页数大于一
if(currentpage<1)
{
//则设置当前页数为一
currentpage=1;
}

//如果,当前页数等于总页数
if(currentpage>util.getTotalPage())
{
//则设置当前页数为总页数
currentpage=util.getTotalPage();
}
}


util.setCurrentPage(currentpage);
List rs=util.getPage(list);

request.setAttribute("rs", rs);
request.setAttribute("page",util);

return mapping.findForward("index");
}
}
gongzhike 2011-05-24
  • 打赏
  • 举报
回复
我有代码还要不要?
wangjiangbo2 2011-05-24
  • 打赏
  • 举报
回复
我存储记录是用的vector不过和list类似,可以参考


int pagenum = 1;//页码
int total = 0;//总记录数
int tc = 0;//总页数
int pc = 10;//每页记录数

if(request.getParameter("pagenum")!=null){
pagenum = Integer.parseInt(request.getParameter("pagenum"));
}



WssbTool wt = new WssbTool();
Vector v = wt.selectWskp(glbm, rqq, rqz);//根据条件查询到的所有记录
total = v.size();
if(total%pc==0){
tc = total/pc;
}else{
tc = total/pc+1;
}
ArrayList vv = new ArrayList();

for(int i=0;i<v.size();i++){
//得到pagenum页记录
if(i>(pagenum-1)*pc-1 && i<pagenum*pc){
Vector record = (Vector)v.get(i);
vv.add(record);//pagenum页的记录
}
}

String ym = "共"+total+"条申报记录,当前为"+pagenum+"/"+tc+"页   ";

String resu = "";//分页页码链接
if(pagenum==1 && tc>1){
resu = "<a href='/wssb/WskpCx?pagenum="+(pagenum+1)+"&rqq="+rqq+"&rqz="+rqz+"'>下一页</a>  ";
resu = resu + "<a href='/wssb/WskpCx?pagenum="+tc+"&rqq="+rqq+"&rqz="+rqz+"'>尾页</a>";
}else if(pagenum==tc && tc>1){
resu = "<a href='/wssb/WskpCx?pagenum=1&rqq="+rqq+"&rqz="+rqz+"'>首页</a>  ";
resu = resu + "<a href='/wssb/WskpCx?pagenum="+(pagenum-1)+"&rqq="+rqq+"&rqz="+rqz+"'>上一页</a>";
}else if(pagenum>1 && pagenum<tc){
resu = "<a href='/wssb/WskpCx?pagenum=1&rqq="+rqq+"&rqz="+rqz+"'>首页</a>  ";
resu = resu + "<a href='/wssb/WskpCx?pagenum="+(pagenum-1)+"&rqq="+rqq+"&rqz="+rqz+"'>上一页</a>";
resu = resu + "<a href='/wssb/WskpCx?pagenum="+(pagenum+1)+"&rqq="+rqq+"&rqz="+rqz+"'>下一页</a>  ";
resu = resu + "<a href='/wssb/WskpCx?pagenum="+tc+"&rqq="+rqq+"&rqz="+rqz+"'>尾页</a>";
}


session.setAttribute("list", vv);//显示的列表,传递给显示页面
风中叶 2011-05-24
  • 打赏
  • 举报
回复
楼主 如果你的数据量非常大的话 建议你还是不要用这种方式 除非你每次分页取数据时用到了缓存机制,这样效率会好些
当让如果数据量不大也就算了
我这有个分页的方法 你看下吧
你需要吧
flightList:数据集合 perPageNum:每页显示的数据量 pageCount:总页数 pageNum:当前要显示第几页页数 flightPageList :分页后的需要显示的数据结果集

//计算总页数
int pageCount = 0;
if (flightList.size() % perPageNum == 0) {
pageCount = flightList.size() / perPageNum;
} else {
pageCount = (flightList.size() / perPageNum) + 1;
}
//超过总页数置为最后一页
if (pageNum > pageCount) {
pageNum = pageCount;
}

//计算需要显示的结果数据
List<FmeToday> flightPageList = new ArrayList<FmeToday>();
for (int i = ((pageNum-1) * perPageNum);
i < flightList.size() && i < ((pageNum) * perPageNum) && pageNum > 0; i++) {
flightPageList.add(flightList.get(i));
}
}
langxiashahai 2011-05-24
  • 打赏
  • 举报
回复
解决方案就不对,早改早安心。
korgs 2011-05-24
  • 打赏
  • 举报
回复
你这种方式不行,必须用SQL分页,不然分页没效果。。如果你是为了可操作性,可以用AJAX来实现异步取数据。
shine333 2011-05-24
  • 打赏
  • 举报
回复
话说分页就是因为数据太多,不方便才分的。你几百万数据放到list里面,然后等死机?
sharon_arron 2011-05-24
  • 打赏
  • 举报
回复
我也不想用这种分页啊,但是这个list不是数据库查出的,是很多list集合在一起的,成为一个统一的list,页面我真心写不出来
小绵羊 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qybao 的回复:]

你都得到一个list了,怎么分页也就是怎么从list的哪个位置开始取多少条数据而已,逻辑懂了,又怎么会写不出来?
[/Quote]
+1
况且用list来分页也不是个好想法
qybao 2011-05-24
  • 打赏
  • 举报
回复
你都得到一个list了,怎么分页也就是怎么从list的哪个位置开始取多少条数据而已,逻辑懂了,又怎么会写不出来?
sharon_arron 2011-05-24
  • 打赏
  • 举报
回复
有没有完整的啊,逻辑我懂,但是具体不会写啊
qybao 2011-05-24
  • 打赏
  • 举报
回复
for example
int currIdx = (currPage > 1 ? (currPage - 1) * pageSize : 0);
for (int i=0; i<pageSize && i<list.size(); i++) {
System.out.println(list.get(currIdx+i));
}
YOULOVEXIA 2011-05-24
  • 打赏
  • 举报
回复
查询分页通常要定义六个参数。
上一页
下一页
首页
末页
当前页
总页

81,094

社区成员

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

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