<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 68, comments - 19, trackbacks - 0, articles - 1

    基于SSH+pager-taglib的分頁封裝

    Posted on 2011-02-27 18:26 viery 閱讀(4006) 評論(5)  編輯  收藏 所屬分類: JavaEE
    手動編寫分頁挺好,不過太累。于是在搜索了很多網上開源分頁插件后選擇pager-taglib-2.0,此分頁插件因為用法簡單功能強大能快速上手,下面逐步實現快速jsp頁面的分頁。
    整體效果(因為記錄比較少,所以只有兩頁):

    第二頁:

    1.下載pager-taglib-2.0.war
        在http://jsptags.com/tags/navigation/pager/上可以看到demo和war包下載,在war中解壓出jar包,粘貼入項目的lib文件夾中。


    2.在顯示的jsp上需要引入
    <%@ taglib prefix="pg"  uri="http://jsptags.com/tags/navigation/pager" %>

    3.建立JSPPageModel模型,用于在jsp頁面上返回對象集和總記錄數
    package com.v.oa.common;

    import java.util.List;

    public class JSPPageModel {
        
        
    private int total;
        
        
    private List list;

        
    public int getTotal() {
            
    return total;
        }


        
    public void setTotal(int total) {
            
    this.total = total;
        }


        
    public List getList() {
            
    return list;
        }


        
    public void setList(List list) {
            
    this.list = list;
        }

        
        

    }

    4.建立SystemContext類,將系統啟動時顯示起始記錄數和每頁顯示行數設置在ThreadLocal中。
    package com.v.oa.common;

    public class SystemContext {
        
            
    private static ThreadLocal offset = new ThreadLocal();
            
    private static ThreadLocal pagesize = new ThreadLocal();
            
            
    public static void setOffset(int _offset){
                offset.set(_offset);
            }

            
            
    public static int getOffset(){
                Integer _offset 
    = (Integer)offset.get();
                
    if(_offset == null){
                    
    return 0;
                }

                
    return _offset;
            }

            
            
    public static void removeOffset(){
                offset.remove();
            }

            
            
    public static void setPagesize(int _pagesize){
                pagesize.set(_pagesize);
            }

            
            
    public static int getPagesize(){
                Integer _pagesize 
    = (Integer)pagesize.get();
                
    if(_pagesize == null){
                    
    return Integer.MAX_VALUE;
                }

                
    return _pagesize;
            }

            
            
    public static void removePagesize(){
                pagesize.remove();
            }

    }



    5.建立過濾器,讀出ThreadLocal中的顯示的起始記錄數和每頁顯示行數。這里沒有在界面中去設置用戶可以選擇每頁顯示多少條記錄的功能,此處固定為每頁顯示5條記錄。
    package com.v.oa.common;

    import java.io.IOException;

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;

    public class PagerFilter implements Filter {

        @Override
        
    public void destroy() {
            
    // TODO Auto-generated method stub

        }


        @Override
        
    public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) 
    throws IOException, ServletException {
            HttpServletRequest httpRequest 
    = (HttpServletRequest)request;
            
            SystemContext.setOffset(getOffset(httpRequest));
            SystemContext.setPagesize(getPagesize(httpRequest));
            
            
    try{
                chain.doFilter(request, response);
            }
    finally{
                SystemContext.removeOffset();
                SystemContext.removePagesize();
            }

        }

        
        
    private int getOffset(HttpServletRequest request){
            
    int offset = 0;
            
    try {
                offset 
    = Integer.parseInt(request.getParameter("pager.offset"));
            }
     catch (Exception ignore) {
            }

            
    return offset;
        }

        
        
    private int getPagesize(HttpServletRequest request){
            
    return 5;
        }


        
    public void init(FilterConfig arg0) throws ServletException {
        }

    }


    6.action中:
    protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                
    throws Exception {
            OrgForm of
    =(OrgForm)form;
            
    int parentId=of.getParentId();
            
            String keyWords
    =request.getParameter("keyWords");
            
    if(keyWords==null){
                keyWords
    ="";
            }
    else{
                keyWords
    =java.net.URLDecoder.decode(keyWords,"UTF-8");
            }

            
    //PageModel pm=orgManager.findAll(parentId, pageSize, pageNo, keyWords);
            JSPPageModel pm=orgManager.findAll(parentId, keyWords);
            request.setAttribute(
    "keyWords", keyWords);
            request.setAttribute(
    "pm", pm);
    我這里傳了兩個參數,一個是作為父類id的parentId,一個是搜索的關鍵字keyWords

    7.ManagerImpl實現類,須繼承下面的類
    @Override
        
    public JSPPageModel findAll(int parentId,String keyWords) {
            
            keyWords
    ="%"+keyWords+"%";
            
    if(parentId!=0){
                
    return this.getPage("from Organization o where o.parent.id=? and o.name like ?"new Object[]{parentId,keyWords});
            }

                
    return this.getPage("from Organization o where o.parent.id is null and o.name like ?",keyWords);
        }
    8.實現封裝的核心class:
    package com.v.oa.manager.impl;

    import java.util.List;

    import org.hibernate.Query;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import com.v.oa.common.JSPPageModel;
    import com.v.oa.common.SystemContext;

    /**
     * 此類用于封裝Hibernate的分頁查詢
     * 
    @author Administrator
     *
     
    */


    public class PageModelManager extends HibernateDaoSupport {
        
        
    public JSPPageModel getPage(String hql){
            
    return this.getPage(hql, null,SystemContext.getOffset(),SystemContext.getPagesize());
        }

        
        
    public JSPPageModel getPage(String hql,int offset,int pageSize){
            
    return this.getPage(hql, null, offset, pageSize);
        }

        
    public JSPPageModel getPage(String hql,Object o,int offset,int pageSize){
            
    return this.getPage(hql, new Object[]{o}, offset, pageSize);
        }

        
    public JSPPageModel getPage(String hql,Object o){
            
    return this.getPage(hql, new Object[]{o}, SystemContext.getOffset(),SystemContext.getPagesize());
        }

        
    public JSPPageModel getPage(String hql,Object[] params){
            
    return this.getPage(hql, params, SystemContext.getOffset(),SystemContext.getPagesize());
        }

        
    public JSPPageModel getPage(String hql,Object[] params,int offset,int pageSize){
            
            JSPPageModel pm
    =new JSPPageModel();
            String countHql
    =null;
            
    int index=hql.indexOf("from");
            
    if(index!=-1){
                countHql
    = "select count(*) "+hql.substring(index);
            }

            
            Query query
    =getSession().createQuery(countHql);
            
    if(params!=null ||params.length>0){
                
    for(int i=0;i<params.length;i++){
                    query.setParameter(i, params[i]);
                }

            }

            
    int total=((Long)(query.uniqueResult())).intValue();
            pm.setTotal(total);
            
            query
    =getSession().createQuery(hql);
            
    if(params!=null ||params.length>0){
                
    for(int i=0;i<params.length;i++){
                    query.setParameter(i, params[i]);
                }

            }

            query.setFirstResult(offset);
            query.setMaxResults(pageSize);
            List list
    =query.list();
            pm.setList(list);
            
    return pm;
            
        }

         
        

    }


    整個過程結束, 最后jsp上的分頁代碼如下:
            共&nbsp;${pm.total }&nbsp;條記錄       &nbsp;&nbsp;
      
    <pg:pager url="org.do" items="${pm.total }" export="currentPageNumber=pageNumber" maxPageItems="5">
            
    <pg:param name="parentId"/>
            
    <pg:param name="keyWords"/>
            
    <pg:first>
                
    <href="${pageUrl}">首頁</a>
            
    </pg:first>
            
    <pg:prev>
                
    <href="${pageUrl}">上頁</a>
            
    </pg:prev>
            
    <pg:pages>
                
    <c:choose>
                    
    <c:when test="${currentPageNumber eq pageNumber}">
                        
    <font color="red">${pageNumber }</font>
                    
    </c:when>
                    
    <c:otherwise>
                        
    <href="${pageUrl}">${pageNumber }</a>
                    
    </c:otherwise>
                
    </c:choose>
            
    </pg:pages>
            
    <pg:next>
                
    <href="${pageUrl}">下頁</a>
            
    </pg:next>
            
    <pg:last>
                
    <href="${pageUrl}">尾頁</a>
            
    </pg:last>
        
    </pg:pager>  
    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
        xmlns
    ="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    >
        
      
    <servlet>
        
    <servlet-name>action</servlet-name>
        
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        
    <init-param>
          
    <param-name>config</param-name>
          
    <param-value>/WEB-INF/struts-config.xml</param-value>
        
    </init-param>
        
    <init-param>
          
    <param-name>debug</param-name>
          
    <param-value>2</param-value>
        
    </init-param>
        
    <init-param>
          
    <param-name>detail</param-name>
          
    <param-value>2</param-value>
        
    </init-param>
        
    <load-on-startup>2</load-on-startup>
      
    </servlet>


      
    <!-- Standard Action Servlet Mapping -->
      
    <servlet-mapping>
        
    <servlet-name>action</servlet-name>
        
    <url-pattern>*.do</url-pattern>
      
    </servlet-mapping>    
      
      
    <context-param>
          
    <param-name>contextConfigLocation</param-name>
          
    <param-value>classpath:applicationContext-*.xml</param-value>
      
    </context-param>
      
      
    <listener>
          
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      
    </listener>
      
      
    <filter>
          
    <filter-name>CharacterEncodingFilter</filter-name>
          
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
          
    <init-param>
              
    <param-name>encoding</param-name>
              
    <param-value>GB18030</param-value>
          
    </init-param>
      
    </filter>
      
      
    <filter-mapping>
          
    <filter-name>CharacterEncodingFilter</filter-name>
          
    <url-pattern>*.do</url-pattern>
      
    </filter-mapping>
          
      
    <filter>
          
    <filter-name>OpenSessionInViewFilter</filter-name>
          
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
      
    </filter>
      
      
    <filter-mapping>
          
    <filter-name>OpenSessionInViewFilter</filter-name>
          
    <url-pattern>/*</url-pattern>
      
    </filter-mapping>
      
       
    <filter>
            
    <filter-name>pagerFilter</filter-name>
            
    <filter-class>com.v.oa.common.PagerFilter</filter-class>
      
    </filter>
      
    <filter-mapping>
            
    <filter-name>pagerFilter</filter-name>
            
    <url-pattern>/*</url-pattern>
      
    </filter-mapping>
    </web-app>
    附:

    pg:pager【這個標簽用來設置分頁的總體參數】重要參數說明:
     url:分頁的鏈接根地址,pager標簽會在這個鏈接的基礎上附加分頁參數
     items:總記錄數,pager標簽正是根據這個值來計算分頁參數的
     maxPageItems:每頁顯示的行數,默認為10
     maxIndexPages:在循環輸出頁碼的時候,最大輸出多少個頁碼,默認是10
     
    pg:first【第一頁的標簽】重要參數說明:
     export變量的意義:
     pageUrl - 分頁鏈接URL地址(最重要的export參數)
     pageNumber - 頁碼
     firstItem - 首頁第一行的索引值
     lastItem - 首頁最后一行的索引值
     
    pg:pre【上一頁標簽】重要參數說明:
     export變量的意義:
     pageUrl - 分頁鏈接URL地址(最重要的export參數)
     pageNumber - 頁碼
     firstItem - 前頁第一行的索引值
     lastItem - 前頁最后一行的索引值

    pg:next【下一頁標簽】重要參數說明:
     export變量的意義:
     pageUrl - 分頁鏈接URL地址(最重要的export參數)
     pageNumber - 頁碼
     firstItem - 下頁第一行的索引值
     lastItem - 下頁最后一行的索引值
     
    pg:last重要參數說明:
     export變量的意義:
     pageUrl - 分頁鏈接URL地址(最重要的export參數)
     pageNumber - 頁碼
     firstItem - 尾頁第一行的索引值
     lastItem - 尾頁最后一行的索引值
     
    pg:pages【這個標簽用來循環輸出頁碼信息】重要參數說明:
     export變量的意義:
     pageUrl - 分頁鏈接URL地址(最重要的export參數)
     pageNumber - 頁碼
     firstItem - pageNumber這個頁碼指定的那一頁的第一行的索引值
     lastItem - pageNumber這個頁碼指定的那一頁的最后一行的索引值

    Feedback

    # re: 基于SSH+pager-taglib的分頁封裝  回復  更多評論   

    2011-02-28 09:18 by @joe
    這個工具確實好用,不過在使用中還是有很多問題需要解決,比如參數的傳遞等等問題!

    # re: 基于SSH+pager-taglib的分頁封裝  回復  更多評論   

    2011-02-28 09:27 by d
    一看頁面樣式就知道是尚學堂的東西!

    # re: 基于SSH+pager-taglib的分頁封裝  回復  更多評論   

    2011-02-28 09:29 by vle
    @@joe
    中文參數參數肯定會出現亂碼,有幾種方法,1,更改tomcat server.xml配置文件 2 改分頁插件的class 3 增加過濾器

    # re: 基于SSH+pager-taglib的分頁封裝  回復  更多評論   

    2011-02-28 09:30 by vle
    @d
    是的,是在李騰飛老師的代碼上做了改動

    # re: 基于SSH+pager-taglib的分頁封裝[未登錄]  回復  更多評論   

    2011-02-28 11:50 by @joe
    我們項目也一直再用,還行。
    主站蜘蛛池模板: 无人在线观看免费高清视频| 亚洲AV无码久久精品蜜桃| 亚洲天堂中文字幕在线| 亚洲噜噜噜噜噜影院在线播放| 亚洲αⅴ无码乱码在线观看性色 | 国产伦精品一区二区免费| 91免费资源网站入口| 精品亚洲成a人在线观看| 99热这里有免费国产精品| 亚洲人成影院在线观看| 在线人成精品免费视频| 亚洲av日韩av天堂影片精品| 最近更新免费中文字幕大全| 亚洲精品国产精品乱码不卡| 国产亚洲视频在线观看网址| 成年人在线免费看视频| 亚洲欧洲国产视频| 99视频全部免费精品全部四虎| 亚洲高清不卡视频| 免费不卡在线观看AV| 永久免费AV无码网站在线观看| 亚洲免费电影网站| 久久久久久亚洲精品成人| 免费毛片在线看不用播放器| 亚洲日韩中文字幕在线播放| free哆拍拍免费永久视频 | 亚洲精品高清国产一线久久| 丁香花在线观看免费观看图片| 久久99国产亚洲高清观看首页| 花蝴蝶免费视频在线观看高清版| 亚洲真人无码永久在线观看| 大学生a级毛片免费观看| 美女羞羞喷液视频免费| 亚洲视频人成在线播放| 毛片免费视频播放| 亚洲a无码综合a国产av中文| 91亚洲自偷手机在线观看| 久久国产成人亚洲精品影院| 99精品热线在线观看免费视频| 一区视频免费观看| 久久精品国产亚洲av日韩|