<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 李 明 閱讀(5864) 評論(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永久男同| 亚洲短视频在线观看| 国产精品成人亚洲| 成人人观看的免费毛片| 亚洲大成色www永久网址| 国产美女在线精品免费观看| 亚洲伊人久久大香线蕉结合| 野花高清在线电影观看免费视频 | 亚洲欧洲日本在线| www免费黄色网| 亚洲日韩中文无码久久| 国产日韩一区二区三免费高清| 亚洲精品免费视频| 国产成人yy免费视频| 亚洲精品无码aⅴ中文字幕蜜桃| 国产jizzjizz视频全部免费| 特黄特色大片免费| 亚洲日本中文字幕天堂网| 黄色网站软件app在线观看免费 | 无码人妻精品中文字幕免费| 在线电影你懂的亚洲| 毛片基地免费观看| 无忧传媒视频免费观看入口| 亚洲精品无码专区久久久 | 中文国产成人精品久久亚洲精品AⅤ无码精品| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲精品无码日韩国产不卡av| 免费女人18毛片a级毛片视频| 久久九九免费高清视频| 久久亚洲精品国产精品| 免费高清资源黄网站在线观看| 2022国内精品免费福利视频| 2022年亚洲午夜一区二区福利| 免费看少妇作爱视频| 中文字幕在线免费视频| 亚洲人成片在线观看| 亚洲精品综合久久| 国产福利在线免费| 中文成人久久久久影院免费观看| 亚洲国产精品成人久久久| 亚洲国产电影av在线网址|