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

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

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

    ALL is Well!

    敏捷是一條很長的路,摸索著前進著

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      30 隨筆 :: 23 文章 :: 71 評論 :: 0 Trackbacks
    本文為原創,歡迎轉載,轉載請注明出處BlogJava

    本次分頁組件著重于頁面(Freemarker部分)、及Action部分。
    至于Service及持久層處理,只是做了一個模擬的實現,實際開發中,我是應用了iBatis,封裝了分頁調用。
    由于用法有所不同,所以就不放在源碼范圍內,也不在這里介紹了。
    這里的分頁功能只提供了 上一頁、下一頁、指定頁 的分頁,但在分頁Java代碼中包含了 首頁、末頁的實現。有需要的可自行添加。


    分頁的效果如圖:



    分頁實現代碼介紹:
    1.pagination.ftl 分頁組件 頁面部分。

    2.PageSupport.java 分頁Action部分。

    3.WebPager.java 計算分頁動作。

    4.Pager.java 保存分頁信息,由Action傳遞到Service,根據Pager對象取得數據。

    5.MockDataBase.java 模擬Dao,實現分頁處理。


    使用該組件的方法如下:

    第一步:引入分頁組件

    <#include "/ftl/ecs/pagination.ftl" />
    分頁組件使用了Freemarker的宏。

    第二步:在ftl文件中使用分頁組件

    分頁組件需要輸入4個參數,分別為id、method、btnCssClass、cssClass,其中id、method必須輸入;btnCssClass、cssClass可選。以下是參數詳細說明:
    1.id : 分頁組件的唯一標識。
    2.method : 分頁用的Action。例如:定義了Action為Pagination,則method輸入 Pagination.action;若為動態方法調用,可輸入Pagination!query.action
    3.cssClass : 分頁組件的class屬性。例如cssClass="center"。
    4.btnCssClass : 分頁組件按鈕的class屬性。例如btnCssClass="btn_history"。

    <@pagination id="***" btnCssClass="***" cssClass="***" method="***.action">
    <table>
    <tr>
    <td></td>
    ...
    </tr>
    </table>
    </pagination>
    

    [編輯]第三步:繼承分頁類PageSupport

    PageSupport.java繼承自ActionSupport.java,在要分頁的方法中使用PageSupport.java提供的List pageCall(String module, String target, Map dataMap)分頁調用。
    通過setPageSize(int pageSize)方法設定每頁顯示的記錄數。
    API詳細說明:
    1.pageCall

     參數說明:
    1) String module : 調用service的通道,例如:upf、esf。
    2) String target : 要調用的service的方法,例如:com.ailk.ecs.service.TdupfPageService.selectAllUser。
    3) Map dataMap : 輸入參數。
    返回值說明:
    List : 頁面顯示的數據記錄。
    

    2.setPageSize

     參數說明:
    1) int pageSize : 每頁顯示記錄數。
    

    [編輯]
    第四步:Service代碼中使用

    在service封裝分頁Dao或者分頁方法。

    pagination.ftl代碼:
    <#macro pagination id method cssClass="" btnCssClass="" pageSize='10'>
    <div id='${id}'>
    <#nested> <#-- 要刷新的區域 -->

    <div class="${cssClass}">
        
    <input type="button" onclick="Pagination${id}.gotoPage('prev', '${webPager.pageInfo.currentPage}', '${totalSize}');" value="上一頁" class="${btnCssClass}" />
        
    &nbsp;&nbsp;共 ${totalPages} 頁&nbsp;&nbsp;第 ${webPager.pageInfo.currentPage} 頁&nbsp;&nbsp;轉到
        
    <input type="text" id='${id}_inputPageNo' name='${id}_inputPageNo' size="6"/>頁 &nbsp;&nbsp;
        
    <input type="text" style="display:none"/>
        
    <input type="button" onclick="Pagination${id}.gotoPage('input', '${webPager.pageInfo.currentPage}', '${totalSize}');" value="確定" class="${btnCssClass}" />
        
    <input type="button" onclick="Pagination${id}.gotoPage('next', '${webPager.pageInfo.currentPage}', '${totalSize}');" value="下一頁" class="${btnCssClass}" />
    </div>

    <script>
    if (!this.Pagination${id} ) {
        
    this.Pagination${id} = {}

        
    // 分頁處理方法
        Pagination${id}.gotoPage = function(action, c, t) {
            
    var cmd = action;

            
    // 當總記錄數量小于等于每頁記錄數量時,分頁動作無效
            if (t <= ${webPager.pageInfo.pageSize}{
                
    return;
            }


            
    // 確定按鈕處理
            if(action == 'input') {
                
    var inValue = $("#${id}_inputPageNo").val();

                
    if(inValue.match(/^[0-9]+$/&& parseInt(inValue) > 0{
                    cmd 
    = inValue;
                }

                
    else {
                    
    // TODO 提示錯誤信息
                    return ;
                }

            }


            $('#$
    {id}').load(
                '$
    {method} #${id}',
                
    {action : cmd,
                 totalSize : t,
                 currentPage : c
                }

            );
        }
    ;
        
        
    // 刷新當前頁面
        Pagination${id}.refreshPage = function() {
            
    //Pagination${id}.gotoPage('refresh');
            //scrollPage${id}('refresh', "${method}");
        }
    ;

        
    // 頁碼輸入框keyup事件
        //Pagination${id}.keyup = function(inputElem, currentPage, totalSize) {
            //if (inputElem.value.match(/^[0-9]+$/) && parseInt(inputElem.value) > 0) {
                //Pagination${id}.gotoPage(inputElem.value, currentPage, totalSize);
            //}
        //};
        
        
    //$("#${id}_inputPageNo").keyup(function(event){
            //if(event.keyCode == 13) {
                //Pagination${id}.keyup(this, '${webPager.pageInfo.currentPage}', '${totalSize}');
            //}
        //});
    }

    </script>

    </div>
    </#macro>



    點擊下載源碼。

    非maven化工程,自己找包吧。
    lib包如圖:

    posted on 2010-12-01 17:35 李 明 閱讀(5877) 評論(4)  編輯  收藏 所屬分類: Struts2Freemarker

    評論

    # re: 基于Struts2、Freemarker的分頁組件實現(附工程源碼) 2011-04-10 07:20 wangflood
    筆記嘛。  回復  更多評論
      

    # re: 基于Struts2、Freemarker的分頁組件實現(附工程源碼)[未登錄] 2011-06-06 11:52 cary
    @wangflood
      回復  更多評論
      

    # re: 基于Struts2、Freemarker的分頁組件實現(附工程源碼) 2012-07-31 08:16 Rach
    包里是什么工程,怎么導不到myeclipse中  回復  更多評論
      

    # re: 基于Struts2、Freemarker的分頁組件實現(附工程源碼) 2014-04-29 22:55 zuidaima
    請參考代碼:年末最代碼部分源碼大出血分享-freemarker,bootstrap,springdata jpa分頁代碼 ,下載地址:http://www.zuidaima.com/share/1606851189656576.htm
      回復  更多評論
      

    主站蜘蛛池模板: 成年黄网站色大免费全看| 亚洲色大成网站WWW国产| 欧美好看的免费电影在线观看| 久久亚洲2019中文字幕| 羞羞视频免费网站日本| 四虎免费永久在线播放| 国产精品亚洲AV三区| 免费乱码中文字幕网站| 草久免费在线观看网站| 中文字幕亚洲乱码熟女一区二区 | 2019中文字幕免费电影在线播放 | 亚洲人成网站观看在线播放| 美女视频黄a视频全免费网站一区| 国产在线精品免费aaa片| 狠狠亚洲婷婷综合色香五月排名| 怡红院免费全部视频在线视频| 久久久综合亚洲色一区二区三区| 无码日韩精品一区二区免费暖暖 | 1000部羞羞禁止免费观看视频| 亚洲欧洲日产v特级毛片| 久久久久久99av无码免费网站| 亚洲gay片在线gv网站| 亚洲男人的天堂在线va拉文| 成人影片一区免费观看| 亚洲资源在线视频| 女人与禽交视频免费看 | 日韩成人免费视频| 亚洲人成影院在线高清| 午夜一区二区免费视频| 成人无码视频97免费| 亚洲成在人线电影天堂色| 国产婷婷高清在线观看免费 | 国产免费内射又粗又爽密桃视频| 亚洲人成在线电影| 日韩精品免费电影| 亚洲综合激情视频| 国产精品成人无码免费| 国产好大好硬好爽免费不卡| 2020天堂在线亚洲精品专区| 亚洲一级Av无码毛片久久精品| 狼群影院在线观看免费观看直播|