请教大家个问题!struts框架做的web程序,我的jsp页面,从action里面获得一个list,里面存的多条记录。我想在页面中实现分页显示,简单点就好,好实现吗?直接在JSP页面里面实现分页的逻辑。好做的话,谁能给我段代码?只要JSP页面的就行。谢谢

解决方案 »

  1.   

    为什么要在JSP页面写呢,写好了直接传过去呗,当然你也可以放在JSP去实现,我们的分页都是封装的,你用的数据库是什么
      

  2.   

    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>&nbsp; <a href="findItem.do?method=homePage" class="dh2"> 首页 </a>&nbsp;&nbsp; <a href="findItem.do?method=previousPage" class="dh2"> 上一页 </a>&nbsp;&nbsp; <a href="findItem.do?method=nextPage" class="dh2">下一页</a>&nbsp;&nbsp; <a href="findItem.do?method=setendPage" class="dh2">尾页</a>&nbsp; <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" );

    }
    }
    应该能看懂吧?
      

  3.   

    晕,4楼的兄弟辛苦了,简单点不可以吗?难道我一定要再写个类控制分页吗?
    目前的现状是,页面中我已经能获得action的list对象了,我只是想在JSP页面中把这个list(list里面保存的是多条记录)简单地分页显示出来就可以了,这样就不用改原始代码了。
      

  4.   

    这个分页类就是专门为返回结果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页面调用稍微修改一下,这样可用性更高.认真分析一下,很好理解的,呵呵!
      

  5.   

    不用分的,取下载一个吧。http://download.csdn.net/source/1761981