<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 閱讀(4007) 評論(5)  編輯  收藏 所屬分類: JavaEE
    手動編寫分頁挺好,不過太累。于是在搜索了很多網(wǎng)上開源分頁插件后選擇pager-taglib-2.0,此分頁插件因為用法簡單功能強大能快速上手,下面逐步實現(xiàn)快速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頁面上返回對象集和總記錄數(shù)
    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類,將系統(tǒng)啟動時顯示起始記錄數(shù)和每頁顯示行數(shù)設(shè)置在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中的顯示的起始記錄數(shù)和每頁顯示行數(shù)。這里沒有在界面中去設(shè)置用戶可以選擇每頁顯示多少條記錄的功能,此處固定為每頁顯示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);
    我這里傳了兩個參數(shù),一個是作為父類id的parentId,一個是搜索的關(guān)鍵字keyWords

    7.ManagerImpl實現(xiàn)類,須繼承下面的類
    @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.實現(xiàn)封裝的核心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;
            
        }

         
        

    }


    整個過程結(jié)束, 最后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【這個標(biāo)簽用來設(shè)置分頁的總體參數(shù)】重要參數(shù)說明:
     url:分頁的鏈接根地址,pager標(biāo)簽會在這個鏈接的基礎(chǔ)上附加分頁參數(shù)
     items:總記錄數(shù),pager標(biāo)簽正是根據(jù)這個值來計算分頁參數(shù)的
     maxPageItems:每頁顯示的行數(shù),默認為10
     maxIndexPages:在循環(huán)輸出頁碼的時候,最大輸出多少個頁碼,默認是10
     
    pg:first【第一頁的標(biāo)簽】重要參數(shù)說明:
     export變量的意義:
     pageUrl - 分頁鏈接URL地址(最重要的export參數(shù))
     pageNumber - 頁碼
     firstItem - 首頁第一行的索引值
     lastItem - 首頁最后一行的索引值
     
    pg:pre【上一頁標(biāo)簽】重要參數(shù)說明:
     export變量的意義:
     pageUrl - 分頁鏈接URL地址(最重要的export參數(shù))
     pageNumber - 頁碼
     firstItem - 前頁第一行的索引值
     lastItem - 前頁最后一行的索引值

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

    Feedback

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

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

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

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

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

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

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

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

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

    2011-02-28 11:50 by @joe
    我們項目也一直再用,還行。
    主站蜘蛛池模板: 久久久久久国产精品免费免费| 色猫咪免费人成网站在线观看| 久久精品免费大片国产大片| 国产色无码精品视频免费| 99热精品在线免费观看| 久久精品网站免费观看| 国产成人无码免费视频97| 中文字幕专区在线亚洲| 777亚洲精品乱码久久久久久 | 久久国产免费一区二区三区| 91九色老熟女免费资源站 | 午夜精品射精入后重之免费观看 | 国产伦精品一区二区免费| 精品国产一区二区三区免费| 四虎在线成人免费网站| 国产一级淫片视频免费看| 亚洲第一AV网站| 国产亚洲精品成人AA片| 一级毛片免费不卡直观看| 永久免费视频网站在线观看| 免费观看a级毛片| 国产亚洲AV无码AV男人的天堂| 亚洲成人激情小说| 国产精品免费久久久久影院| 精品国产sm捆绑最大网免费站| 免费人成网站在线高清| 亚洲日本精品一区二区| 小说区亚洲自拍另类| 久久久久国色av免费看| 日本特黄特黄刺激大片免费| 亚洲国产成人精品无码区在线观看 | 在线免费观看毛片网站| 亚洲欧洲成人精品香蕉网| 国产亚洲精aa在线看| 国产在线播放线91免费| 成年女人视频网站免费m| 亚洲乱亚洲乱妇无码麻豆| 亚洲七久久之综合七久久| 免费黄网站在线看| 国产一级特黄高清免费大片| 亚洲综合男人的天堂色婷婷|