在JSP页面中实现简单分页的问题! 请教大家个问题!struts框架做的web程序,我的jsp页面,从action里面获得一个list,里面存的多条记录。我想在页面中实现分页显示,简单点就好,好实现吗?直接在JSP页面里面实现分页的逻辑。好做的话,谁能给我段代码?只要JSP页面的就行。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么要在JSP页面写呢,写好了直接传过去呗,当然你也可以放在JSP去实现,我们的分页都是封装的,你用的数据库是什么 package com.datang.domain;import java.io.Serializable;import java.util.ArrayList;import java.util.Date;import java.util.List;public class PageBean implements Serializable{ /** * 默认每页显示记录数 */ private static final int DEFAULT_PAGE_SIZE = 5; private List<Employee> source; //原始数据 private Date refreshDate;//数据更新时间 private int pageSize = DEFAULT_PAGE_SIZE;//页数 private int page = 0;//当前页数 private boolean newPageSet;//是否是新请求页面 public PageBean(){ } public PageBean( List<Employee> source ){ this.setSource( source ); } public void setSource( List<Employee> source ){ this.source = source; this.refreshDate = new Date(); } public List<Employee> getSource(){ return source; } public Date getRefreshDate(){ return this.refreshDate; } /** *设置数据显示的页数 */ public void setPageSize( int pageSize ){ if( this.pageSize != pageSize ){ this.pageSize = pageSize; if( !this.newPageSet ){ this.page = 0; } } } /** *获取数据显示的页数 */ public int getPageSize(){ return this.pageSize; } /** *设置当前页 */ public void setPage( int page ){ this.page = page; this.newPageSet = true; } /** * 获取当前页 */ public int getPage(){ this.newPageSet = false; if( this.page >= this.getPageCount() ){ this.page = getPageCount() - 1; } return this.page; } /** *获取总页数 */ public int getPageCount(){ float nrOfPages = (float)getSource().size()/getPageSize(); return (int)((nrOfPages > (int)nrOfPages || nrOfPages == 0.0 ) ? nrOfPages + 1 : nrOfPages ); } /** * 是否是首页 */ public boolean isFirstPage(){ return getPage() == 0; } /** *是否是尾页 */ public boolean isLastPage(){ return this.getPage() == getPageCount() - 1; } /** * 上一页 */ public void previousPage(){ if( !isFirstPage() ){ this.page--; } } /** * 下一页 */ public void nextPage(){ if( !isLastPage() ){ this.page++; } } /** *总记录数 */ public int getNorOfElements(){ return getSource().size(); } /** *当前页的第一个记录数 */ public int getFirstElementOnpage(){ return ( getPageSize()*getPage() ); } public int getLastElemnetOnPage(){ int endIndex = getPageSize()*( getPage() + 1 ); return ( endIndex > getSource().size() ? getSource().size() : endIndex ) - 1; } /** * 当前页数据 */ public List<Employee> getPageList(){ return getSource().subList( getFirstElementOnpage() , getLastElemnetOnPage() + 1 ); }}-------------------------------------------------------------------------------------<table width="99%" border=0 cellpadding=4 cellspacing=1 bgcolor=#0867b3> <!--DWLayoutTable--> <tbody> <tr bgcolor=#ffffff height=20> <td height="20" align="center" valign="middle" nowrap> <span class="STYLE7">共${itempage.pageCount}页</span> <a href="findItem.do?method=homePage" class="dh2"> 首页 </a> <a href="findItem.do?method=previousPage" class="dh2"> 上一页 </a> <a href="findItem.do?method=nextPage" class="dh2">下一页</a> <a href="findItem.do?method=setendPage" class="dh2">尾页</a> <span class="STYLE7">跳转到</span> <select name="select2" class="text2" style="WIDTH: 40px"> <option value="${itempage.pageCount}">${itempage.pageCount}</option> </select> </td> </tr> </tbody> </table>------------------------------------------------------------------------------------package cn.lb.web.actions;import java.io.UnsupportedEncodingException;import java.sql.Date;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import cn.lb.domain.Item;import cn.lb.service.ItemService;import cn.lb.util.BeanFactory;import cn.lb.util.ItemPage;import cn.lb.web.forms.ItemForm;public class FindItemAction extends DispatchAction { ItemService item = (ItemService) BeanFactory.getBean("itemService"); public ActionForward unspecified(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) { try { request.setCharacterEncoding("gb2312"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } ItemForm iform=(ItemForm)form; Item it=new Item(); String startdate1=iform.getStrattime1(); String startdate2=iform.getStrattime2(); String enddate1=iform.getEndtime1(); String enddate2=iform.getEndtime2(); Date s1=null; Date s2=null; Date e1=null; Date e2=null; if(startdate1.equals("") || startdate2.equals("")){ s1=null; s2=null; }else { s1=Date.valueOf(startdate1); s2=Date.valueOf(startdate2); } if(enddate1.equals("") || enddate2.equals("")){ e1=null; e2=null; }else{ e1=Date.valueOf(enddate1); e2=Date.valueOf(enddate2); } it.setName(iform.getName()); it.setNumber(iform.getNumber()); it.setResponsible_person(iform.getResponsible_person()); List<Item> list=item.queryItemByObject(it, s1, s2, e1, e2); if ( list != null ) { System.out.println(list.size()); // 将查询结果放置到分页对象中 ItemPage itempage = new ItemPage( list ); // 设置每页显示的条数 itempage.setPageSize(4); int count = itempage.getNorOfElements();// 记录总条数 // 将分页对象存放到session中 request.getSession().setAttribute( "itempage" , itempage ); request.setAttribute( "item" , itempage.getPageList() ); // request.setAttribute( "pageBean" , pageBean ); request.getSession().setAttribute("count", count);// } return mapping.findForward("itemck"); } /** * 下一页 */ public ActionForward nextPage( ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response ){ //取出session中的分页器 ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" ); //取出下一页数据 itempage.nextPage(); request.setAttribute( "item" , itempage.getPageList() ); request.setAttribute( "itempage" , itempage ); return mapping.findForward( "itemck" ); } /** * 上一页 */ public ActionForward previousPage( ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response ){ //取出session中的分页器 ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" ); //取出上一页数据 itempage.previousPage(); request.setAttribute( "item" , itempage.getPageList() ); request.setAttribute( "itempage" , itempage ); return mapping.findForward( "itemck" ); } /** * 首页 */ public ActionForward homePage( ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response ){ //取出session中的分页器 ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" ); //取出首页数据 itempage.setPage(0); request.setAttribute( "item" , itempage.getPageList() ); request.setAttribute( "itempage" , itempage ); return mapping.findForward( "itemck" ); } /** * 尾页 */ public ActionForward setendPage( ActionMapping mapping , ActionForm form , HttpServletRequest request , HttpServletResponse response ){ //取出session中的分页器 ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" ); //取出末页数据 itempage.setPage(itempage.getPageCount() - 1); request.setAttribute( "item" , itempage.getPageList() ); request.setAttribute( "itempage" , itempage ); return mapping.findForward( "itemck" ); }}应该能看懂吧? 晕,4楼的兄弟辛苦了,简单点不可以吗?难道我一定要再写个类控制分页吗?目前的现状是,页面中我已经能获得action的list对象了,我只是想在JSP页面中把这个list(list里面保存的是多条记录)简单地分页显示出来就可以了,这样就不用改原始代码了。 这个分页类就是专门为返回结果list而设计的, 改动很小,只要把private List <Employee> source; //原始数据 中的<Employee>的改成你要存放的对象,public PageBean( List <Employee> source ){ this.setSource( source ); } public void setSource( List <Employee> source ){ this.source = source; this.refreshDate = new Date(); } public List <Employee> getSource(){ return source; } public List <Employee> getPageList(){ return getSource().subList( getFirstElementOnpage() , getLastElemnetOnPage() + 1 ); } 然后在action里面直接 new 一个分页类,设置一下每页显示的条数,把返回值用request.setAttribute("list",list);设置一下,action要继承DispatchAction,在jsp页面就可以直接用<a href="findItem.do?method=previousPage" class="dh2"> 上一页 </a>就可以了。这个分页类是通用的,只要返回值是list就可以了,其他类并不需要做任何改变,jdbc里面的sql语句,或者hibernate里面的hql语句都不要做任何改变,只是jsp页面调用稍微修改一下,这样可用性更高.认真分析一下,很好理解的,呵呵! 不用分的,取下载一个吧。http://download.csdn.net/source/1761981 将WEB项目打包成.EXE,用于安装 myeclipse连接 access struts2标签中遇到的表达式,小弟不懂请教高手 流程有问题,只对第一个Action做处理了,显示不上去添加后的内容 连接数据库时出现的问题 如何在servlet里用POST的方法传参数 求一些Tomcat连接池参数的详解 niko7(掠水无痕)请进来帮我解答一下你写的代码意思~ 求大神看一下啊,jsp传值到action的问题。 异常处理错误! validation2.3.4 怎么使用 URL显示问题,不带id和参数是怎么做到的?
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class PageBean implements Serializable{ /**
* 默认每页显示记录数
*/
private static final int DEFAULT_PAGE_SIZE = 5; private List<Employee> source; //原始数据
private Date refreshDate;//数据更新时间
private int pageSize = DEFAULT_PAGE_SIZE;//页数
private int page = 0;//当前页数
private boolean newPageSet;//是否是新请求页面
public PageBean(){
}
public PageBean( List<Employee> source ){
this.setSource( source );
}
public void setSource( List<Employee> source ){
this.source = source;
this.refreshDate = new Date();
}
public List<Employee> getSource(){
return source;
}
public Date getRefreshDate(){
return this.refreshDate;
}
/**
*设置数据显示的页数
*/
public void setPageSize( int pageSize ){
if( this.pageSize != pageSize ){
this.pageSize = pageSize;
if( !this.newPageSet ){
this.page = 0;
}
}
}
/**
*获取数据显示的页数
*/
public int getPageSize(){
return this.pageSize;
}
/**
*设置当前页
*/
public void setPage( int page ){
this.page = page;
this.newPageSet = true;
}
/**
* 获取当前页
*/
public int getPage(){
this.newPageSet = false;
if( this.page >= this.getPageCount() ){
this.page = getPageCount() - 1;
}
return this.page;
}
/**
*获取总页数
*/
public int getPageCount(){
float nrOfPages = (float)getSource().size()/getPageSize();
return (int)((nrOfPages > (int)nrOfPages || nrOfPages == 0.0 ) ? nrOfPages + 1 : nrOfPages );
}
/**
* 是否是首页
*/
public boolean isFirstPage(){
return getPage() == 0;
}
/**
*是否是尾页
*/
public boolean isLastPage(){
return this.getPage() == getPageCount() - 1;
}
/**
* 上一页
*/
public void previousPage(){
if( !isFirstPage() ){
this.page--;
}
}
/**
* 下一页
*/
public void nextPage(){
if( !isLastPage() ){
this.page++;
}
}
/**
*总记录数
*/
public int getNorOfElements(){
return getSource().size();
}
/**
*当前页的第一个记录数
*/
public int getFirstElementOnpage(){
return ( getPageSize()*getPage() );
}
public int getLastElemnetOnPage(){
int endIndex = getPageSize()*( getPage() + 1 );
return ( endIndex > getSource().size() ? getSource().size() : endIndex ) - 1;
}
/**
* 当前页数据
*/
public List<Employee> getPageList(){
return getSource().subList( getFirstElementOnpage() , getLastElemnetOnPage() + 1 );
}
}
-------------------------------------------------------------------------------------
<table width="99%" border=0 cellpadding=4 cellspacing=1
bgcolor=#0867b3>
<!--DWLayoutTable-->
<tbody>
<tr bgcolor=#ffffff height=20>
<td height="20" align="center" valign="middle" nowrap> <span class="STYLE7">共${itempage.pageCount}页</span> <a href="findItem.do?method=homePage" class="dh2"> 首页 </a> <a href="findItem.do?method=previousPage" class="dh2"> 上一页 </a> <a href="findItem.do?method=nextPage" class="dh2">下一页</a> <a href="findItem.do?method=setendPage" class="dh2">尾页</a> <span class="STYLE7">跳转到</span>
<select name="select2" class="text2" style="WIDTH: 40px">
<option value="${itempage.pageCount}">${itempage.pageCount}</option>
</select>
</td>
</tr>
</tbody>
</table>
------------------------------------------------------------------------------------
package cn.lb.web.actions;import java.io.UnsupportedEncodingException;
import java.sql.Date;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;import cn.lb.domain.Item;
import cn.lb.service.ItemService;
import cn.lb.util.BeanFactory;
import cn.lb.util.ItemPage;
import cn.lb.web.forms.ItemForm;public class FindItemAction extends DispatchAction {
ItemService item = (ItemService) BeanFactory.getBean("itemService"); public ActionForward unspecified(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("gb2312");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ItemForm iform=(ItemForm)form;
Item it=new Item();
String startdate1=iform.getStrattime1();
String startdate2=iform.getStrattime2();
String enddate1=iform.getEndtime1();
String enddate2=iform.getEndtime2();
Date s1=null;
Date s2=null;
Date e1=null;
Date e2=null;
if(startdate1.equals("") || startdate2.equals("")){
s1=null;
s2=null;
}else {
s1=Date.valueOf(startdate1);
s2=Date.valueOf(startdate2);
}
if(enddate1.equals("") || enddate2.equals("")){
e1=null;
e2=null;
}else{
e1=Date.valueOf(enddate1);
e2=Date.valueOf(enddate2);
}
it.setName(iform.getName());
it.setNumber(iform.getNumber());
it.setResponsible_person(iform.getResponsible_person());
List<Item> list=item.queryItemByObject(it, s1, s2, e1, e2);
if ( list != null ) {
System.out.println(list.size());
// 将查询结果放置到分页对象中
ItemPage itempage = new ItemPage( list );
// 设置每页显示的条数
itempage.setPageSize(4);
int count = itempage.getNorOfElements();// 记录总条数
// 将分页对象存放到session中
request.getSession().setAttribute( "itempage" , itempage );
request.setAttribute( "item" , itempage.getPageList() );
// request.setAttribute( "pageBean" , pageBean );
request.getSession().setAttribute("count", count);//
}
return mapping.findForward("itemck");
}
/**
* 下一页
*/
public ActionForward nextPage( ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response ){
//取出session中的分页器
ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" );
//取出下一页数据
itempage.nextPage();
request.setAttribute( "item" , itempage.getPageList() );
request.setAttribute( "itempage" , itempage );
return mapping.findForward( "itemck" );
}
/**
* 上一页
*/
public ActionForward previousPage( ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response ){
//取出session中的分页器
ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" );
//取出上一页数据
itempage.previousPage();
request.setAttribute( "item" , itempage.getPageList() );
request.setAttribute( "itempage" , itempage );
return mapping.findForward( "itemck" );
}
/**
* 首页
*/
public ActionForward homePage( ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response ){
//取出session中的分页器
ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" );
//取出首页数据
itempage.setPage(0);
request.setAttribute( "item" , itempage.getPageList() );
request.setAttribute( "itempage" , itempage );
return mapping.findForward( "itemck" );
}
/**
* 尾页
*/
public ActionForward setendPage( ActionMapping mapping , ActionForm form ,
HttpServletRequest request , HttpServletResponse response ){
//取出session中的分页器
ItemPage itempage = (ItemPage)request.getSession().getAttribute( "itempage" );
//取出末页数据
itempage.setPage(itempage.getPageCount() - 1);
request.setAttribute( "item" , itempage.getPageList() );
request.setAttribute( "itempage" , itempage );
return mapping.findForward( "itemck" );
}
}
应该能看懂吧?
目前的现状是,页面中我已经能获得action的list对象了,我只是想在JSP页面中把这个list(list里面保存的是多条记录)简单地分页显示出来就可以了,这样就不用改原始代码了。
this.setSource( source );
}
public void setSource( List <Employee> source ){
this.source = source;
this.refreshDate = new Date();
}
public List <Employee> getSource(){
return source;
} public List <Employee> getPageList(){
return getSource().subList( getFirstElementOnpage() , getLastElemnetOnPage() + 1 );
} 然后在action里面直接 new 一个分页类,设置一下每页显示的条数,把返回值用request.setAttribute("list",list);设置一下,action要继承DispatchAction,在jsp页面就可以直接用<a href="findItem.do?method=previousPage" class="dh2"> 上一页 </a>就可以了。这个分页类是通用的,只要返回值是list就可以了,其他类并不需要做任何改变,jdbc里面的sql语句,或者hibernate里面的hql语句都不要做任何改变,只是jsp页面调用稍微修改一下,这样可用性更高.认真分析一下,很好理解的,呵呵!