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

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

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

    幸せのちから

    平凡的世界
    看似平常實崎嶇
    成如容易卻艱辛

    Chapter 12. Limit

    Chapter 12. Limit

    12.1. Limit指南

    默認的情況下eXtremeTable取得所有的結果集然后處理Beans集合,這樣的好處是 你可以隨意進行排序、過濾和分頁操作。你只需要組裝Beans集合并讓eXtremeTable知道如何 引用它。這樣的操作對于小到中等數據量的結果集非常有效,當結果集很大時這將非常糟糕。 這是一個判斷,但我更喜歡描述如何做出我的技術決定。如果您認為在性能上有問題, 那么最好是使用一個profiler工具記錄并查看它。有許多開源和商業的profiler工具可以幫助 你做出最好的判斷。因此,假設我們發現了性能上存在問題,需要我們自己來處理分頁。

    手動處理分頁意味著你一次只想取得一頁顯示需要的結果集。同時,你需要自己處理排序、過濾和分頁。 下面的討論是基于我假設你從數據庫中取得集合,當然同樣的原理能應用到任何地方。

    這是一個重要的部分。為了得到較小的結果集,你可以創建一個普通的查詢語句,但是limit你得到的結果集。 在Sybase和SQLServer中你可以使用rowcount命令,在MySql中你可以使用limit命令。 我不知道其他數據庫怎么使用,但我確信每個數據庫都有相似的功能。 也就是說當用戶瀏覽第一頁是得到第一頁需要的 結果集,當用戶瀏覽下一頁時,再得到下一頁需要的結果集。

    使用Sybase的開發人員可能會說:rowcount命令總是從第一條開始,那么當我到第二頁時我也必須 從第一條數據開始。 是的,你現在得到的是兩頁的結果集,而不需要得到所有的結果集。當你到第三頁時,你只需要得到三頁的結果集。。。。。。 其他數據庫比如MySQL,允許你精確地得到你想要的那段數據,這樣你就可以只得到當前頁面顯示需要的結果集。

    為了知道用戶想如何排序和過濾,他們想瀏覽哪一頁,一頁需要顯示幾條結果,eXtremeTable有一個使用LimitFactory 創建的名為Limit的簡便接口:

    12.2. 創建Limit

    首先你需要通過LimitFactory得到一個Limit實例:

    Context context = new HttpServletRequestContext(request);
    LimitFactory limitFactory = new TableLimitFactory(context, tableId);
    Limit limit = new TableLimit(limitFactory);

    Limit對象定義了limit結果集的所有方法。

    TableLimitFactory具有另外一個構造函數,如果沒有指定tableId的話默認的tableId將為ec。

    Context context = new HttpServletRequestContext(request);
    LimitFactory limitFactory = new TableLimitFactory(context);
    Limit limit = new TableLimit(limitFactory);

    12.3. Filter和Sort屬性

    當你對Limit實例化時,實例化對象包含兩個對象:FilterSet和Sort。

    private FilterSet filterSet;
    private Sort sort;

    FilterSet包含一個過濾動作(Action)和一個過濾器對象數組。 動作為TableConstants.FILTER_ACTION或TableConstants.CLEAR_ACTION。 一個過濾器包含一個property和這個過濾器的值。

    private final String action;
    private final Filter[] filters;

    Sort對象包含property和sortOrder。sortOrder為 TableConstants.SORT_ASC或TableConstants.SORT_DESC:

    private Sort sort;

    12.4. 設置頁和行屬性

    設置行屬性:

    limit.setRowAttributes(totalRows, DEFAULT_ROWS_DISPLAYED);

    下面是設置行屬性可能用到的信息:

    private int rowStart;
    private int rowEnd;
    private int currentRowsDisplayed;
    private int page;
    private int totalRows;

    每個變量都有一個getter方法,我將不深入講解屬性的細節。

    12.5. Setup

    在你完成所有的定制工作:排序、過濾.....定制的Controller(Spring)或者Action(Struts)或者其他類似的框架后, 另外你需要創建一個callback,eXtremeTable已經提供了一個名為LimitCallback的實現。為了使用你只需要設置表 屬性:retrieveRowsCallback、filterRowsCallback和sortRowsCallback:

    <ec:table
    items="presidents"
    retrieveRowsCallback="limit"
    filterRowsCallback="limit"
    sortRowsCallback="limit"
    action="${pageContext.request.contextPath}/limit.run"
    title="Presidents"
    >
    <ec:row>
    <ec:column property="fullName" title="Name"/>
    <ec:column property="nickName" />
    <ec:column property="term" />
    <ec:column property="born" cell="date"/>
    <ec:column property="died" cell="date"/>
    <ec:column property="career" />
    </ec:row>
    </ec:table>

    使用callback需要做的唯一事情是傳輸集合到request,同時傳輸totalRows屬性。 totalRows表示總行數,使用PaginationCallback.TOTAL_ROWS靜態變量將易于維護。 如果JSP頁面使用了兩個(以上)eXtremeTable的話你可以利用tableId分別傳輸totalRows。 例如如果tableId名為pres,你可以如下處理:

    request.setAttribute("pres", presidents);
    request.setAttribute("pres_totalRows", new Integer(""+totalRows));

    譯者注:關于limit使用的更詳細信息,請參考《Limit指南》。

    posted on 2006-02-28 21:47 Lucky 閱讀(855) 評論(0)  編輯  收藏 所屬分類: extremeComponents

    <2006年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627281234
    567891011

    導航

    隨筆分類(125)

    文章分類(5)

    日本語

    搜索

    積分與排名

    最新隨筆

    最新評論

    主站蜘蛛池模板: 国产亚洲福利在线视频| 亚洲AV无码码潮喷在线观看| 亚洲1区1区3区4区产品乱码芒果| 免费在线中文日本| 亚洲伊人久久大香线蕉综合图片| 一区二区三区精品高清视频免费在线播放 | 三年片在线观看免费大全| 亚洲精品在线网站| 免费人成在线观看69式小视频| 亚洲综合小说久久另类区| 亚洲国产精品免费在线观看| 亚洲码在线中文在线观看| 中文字幕无码播放免费| 亚洲 欧洲 自拍 另类 校园| 在线jlzzjlzz免费播放| 亚洲GV天堂无码男同在线观看 | 日本免费高清一本视频| 色偷偷尼玛图亚洲综合| 亚洲国产精品成人网址天堂| 日本高清不卡中文字幕免费| jlzzjlzz亚洲乱熟在线播放| 99久久免费国产特黄| 在线观看亚洲人成网站| 无码一区二区三区AV免费| 亚洲国产精品成人AV在线| 亚洲国产天堂久久综合| 免费在线黄色电影| 亚洲狠狠ady亚洲精品大秀| 搡女人真爽免费视频大全| 黄床大片30分钟免费看| 亚洲午夜国产精品无码老牛影视 | 亚洲色大成网站WWW国产| 免费播放特黄特色毛片| 久久精品中文字幕免费| 亚洲一区欧洲一区| 亚洲真人日本在线| 日韩亚洲国产高清免费视频| 黄色三级三级三级免费看| 亚洲国产精品一区二区久久| 在线看片人成视频免费无遮挡| 国产日韩在线视频免费播放|