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

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

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

    像一顆晨土

    常用鏈接

    統(tǒng)計(jì)

    blogs

    life

    最新評(píng)論

    pager-taglib 體驗(yàn)

    ??????可能是自已習(xí)慣了用自已的分頁(yè)組件。一直不知道有這樣一個(gè)現(xiàn)成的分頁(yè)標(biāo)簽。直到那天,白衣跟我提起了一下,我Search了一下,發(fā)現(xiàn)了Pager-taglib這個(gè)東東。支持多種風(fēng)格的分頁(yè)顯示。
    ?????? 先簡(jiǎn)單介紹一下Pager-taglib。實(shí)際上,她是一個(gè)Jsp標(biāo)簽庫(kù),為在JSP上顯示分頁(yè)信息而設(shè)計(jì)的一套標(biāo)簽,通過這些標(biāo)簽的不同的組合,會(huì)形成多種不一樣的分頁(yè)頁(yè)面,風(fēng)格各異,她自帶的DEMO就有七種左右的分頁(yè)風(fēng)格,包括Google的分頁(yè)風(fēng)格。而需要訂制自已的風(fēng)格的分頁(yè)頁(yè)面也非常簡(jiǎn)單。
    ??????接觸的當(dāng)天、匆匆看了下Demo和文檔,發(fā)現(xiàn)這個(gè)很早(2002年最新版一直到現(xiàn)在)就已經(jīng)有的東西,似 乎比較擅長(zhǎng)顯示端分頁(yè)。如,把所有的數(shù)據(jù)傳到頁(yè)面,通過參數(shù)設(shè)定頁(yè)面大小等,可能得到很完美的分頁(yè)效果。
    ??????第二天回家,做了些小動(dòng)作,把一個(gè)頁(yè)碼參數(shù)塞進(jìn)URL里面,讓程序在頁(yè)面之下分了頁(yè)再把結(jié)果傳出來,簡(jiǎn)單地實(shí)現(xiàn)了服務(wù)器的分頁(yè)的功能。
    ??????Pager-taglib的文檔很詳盡,我如果有說也只有翻譯的份,要是真的翻譯也就免了,文檔還是挺容易看懂的。于是我開始作了另外一個(gè)小Demo,用了原先Demo里面的一個(gè)分頁(yè)風(fēng)格(Simple),稍作修改。希望能幫助自已理清脈絡(luò)和對(duì)朋友們有用:P
    一、模擬業(yè)務(wù)類:

    package ?net.jf.ajax.business;

    import ?java.util.ArrayList;
    import ?java.util.List;

    public ? class ?PageManager? {
    ????
    private ? static ?List?names;
    ????
    {
    ????????names?
    = ? new ?ArrayList();
    ????????names.add(
    " black " );
    ????????names.add(
    " black " );
    ????????names.add(
    " black " );
    ????????names.add(
    " black " );
    ????????names.add(
    " blue " );
    ????????names.add(
    " blue " );
    ????????names.add(
    " blue " );
    ????????names.add(
    " blue " );
    ????????names.add(
    " blue " );
    ????????names.add(
    " red " );
    ????????names.add(
    " yellow " );
    ????????names.add(
    " blue " );
    ????????names.add(
    " green " );
    ????????names.add(
    " blue " );
    ????????names.add(
    " black " );
    ????????names.add(
    " green " );
    ????????names.add(
    " black " );
    ????}

    ????
    /**
    ?????*?查詢函數(shù)
    ?????*?
    @param ?pageNum?頁(yè)碼
    ?????*?
    @param ?pageSize?頁(yè)大小
    ?????*?
    @param ?condition?查詢條件
    ?????*?
    */

    ????
    public ?List?query( int ?pageNum, int ?pageSize,String?condition) {
    ????????List?tmpNames?
    = ?getNames(condition);
    ????????List?ret?
    = ? new ?ArrayList();
    ????????
    int ?start? = ?(pageNum? - ? 1 )? * ?pageSize;
    ????????
    int ?end? = ?start? + ?pageSize? - ? 1 ;
    ????????
    if (start? >= ?tmpNames.size())
    ????????????
    return ?ret;
    ????????
    for ( int ?i? = ? 0 ;?i? < ?tmpNames.size();?i? ++ ) {
    ????????????
    if (i? >= ?start? && ?i? <= ?end)
    ????????????????ret.add(tmpNames.get(i));
    ????????}

    ????????
    return ?ret;
    ????}

    ????
    /**
    ?????*?按條件查詢所有名字
    ?????*?
    */

    ????
    private ?List?getNames(String?condition)? {
    ????????
    if ( null ? == ?condition)? return ?names;
    ????????List?ret?
    = ? new ?ArrayList();
    ????????
    ????????
    for ( int ?i? = ? 0 ;?i? < ?names.size();?i? ++ ) {
    ????????????
    if (condition.equals(names.get(i)))
    ????????????????ret.add(names.get(i));
    ????????}

    ????????
    return ?ret;
    ????}

    ????
    /**
    ?????*?獲得條件指定的名字的數(shù)量
    ?????*?
    */

    ????
    public ? int ?getSize(String?condition) {
    ????????????
    return ?getNames(condition).size();
    ????}

    }

    二、JSP代碼:
    本頁(yè)面提供了列表、查找功能。目的在于演示在Pager-taglib里面如何傳遞參數(shù)(如Form的Post后URL是找不到參數(shù)的,但是要保持原來的查詢條件必須把這些參數(shù)在分頁(yè)的時(shí)候加到URL上去)。

    <% @?page?language = " java " ? import = " java.util.* " ?pageEncoding = " UTF-8 " %>
    <% @?taglib?uri = " http://jsptags.com/tags/navigation/pager " ?prefix = " pg " ? %>
    <%
    request.setCharacterEncoding(
    " UTF-8 " );
    %>
    < jsp:useBean?id? = ? " pm " ?scope = " page " ? class = " net.jf.ajax.business.PageManager " />
    <! DOCTYPE?HTML?PUBLIC? " -//W3C//DTD?HTML?4.01?Transitional//EN " >
    < html >
    ??
    < head >
    ??
    </ head >
    ??
    ??
    < body >
    ????
    < form?name = " cc " ?action = " pager.jsp " ?method = " post " >
    ????????
    < input?type = " text " ?name = " name " ?value = " <%=request.getParameter( " name " )%> " />< input?type = " submit " ?value = " search " />
    ????
    </ form >
    ????
    < pg:pager
    ????items
    = " <%=?pm.getSize(request.getParameter( " name " ))?%> "
    ????index
    = " center "
    ????maxPageItems
    = " 5 "
    ????maxIndexPages
    = " 5 "
    ????isOffset
    = " <%=?false?%> "
    ????export
    = " pageOffset,currentPageNumber=pageNumber "
    ????scope
    = " request " >
    ????
    <%
    ????
    int ?pageNum? = ? 1 ;
    ????
    if (request.getParameter( " pageNo " )? != ? null )
    ????????pageNum?
    = ?Integer.valueOf(request.getParameter( " pageNo " ));
    ????
    int ?pageSize? = ? 5 ;
    ??????List?result?
    = ?pm.query(pageNum,pageSize,request.getParameter( " name " ));
    ??
    %>
    ????
    < table >
    ????????
    < tr >
    ????????????
    < td > result </ td >
    ????????
    </ tr >
    ????????
    <% for ( int ?i? = ? 0 ;?i? < ?result.size();?i? ++ ) { %>
    ????????
    < tr >
    ????????????
    < td >
    ????????????????
    <%= result.get(i) %>
    ????????????
    </ td >
    ????????
    </ tr >
    ????????
    <% }
    %>
    ????
    </ table >
    ????
    ????
    < pg:param?name = " name " />
    ????
    < pg:index >
    ????????
    < jsp:include?page = " /pagination/jsptags.jsp " ?flush = " true " />
    ????
    </ pg:index >
    ????
    </ pg:pager >
    ??
    </ body >
    </ html >


    從頁(yè)面里可以看到,這里使用了三個(gè)標(biāo)簽

    1、<pg:pager>,在這個(gè)標(biāo)簽庫(kù)里就充當(dāng)著一個(gè)領(lǐng)袖的作用,一切子標(biāo)簽都在它里面工作。就以上出現(xiàn)的參數(shù)進(jìn)行解釋一下:
    items:數(shù)據(jù)的紀(jì)錄數(shù)
    index:說起來比較麻煩,反正是一次大跳躍之后,當(dāng)前頁(yè)面在各個(gè)頁(yè)數(shù)的什么位置,默認(rèn)為Center,不動(dòng)也罷了。
    maxPageItems:顯示最多的紀(jì)錄數(shù)/頁(yè)
    maxIndexPages:顯示最多的分頁(yè)數(shù)/次,如設(shè)為5的話,則會(huì)出現(xiàn)這樣的情況 1 2 3 4 5 .或 3 4 5 6 7 這樣的形式,其實(shí)她自帶的DEMO都喜歡把頁(yè)數(shù)展現(xiàn)出來排成一排。
    isOffset:與pg:item配套使用,頁(yè)pg:item基本上被我淘汰出局。
    export:這個(gè)屬性比較重要,文檔也對(duì)此作好相對(duì)長(zhǎng)篇幅的說明。這個(gè)屬性是讓標(biāo)簽給你暴露什么變量,當(dāng)然這些變量是有選擇的,如在Pager標(biāo)簽里,可以暴露出來的變量有pageOffset及pageNumber,即頁(yè)碼偏移量及頁(yè)碼。通過這兩個(gè)變量名,可以在Jsp或Java里面從Request里獲得。Export屬性接受的值還有表達(dá)式,如currentPage=pageNumber表示,把pageNumber的值暴露出來,并賦給一個(gè)叫CurrentPage的變量,這個(gè)變量將被保存到Request中,在Jsp或Java中可以得到。
    scope:咳。還需要講么?

    2、<pg:param>這個(gè)標(biāo)簽很有用,用來設(shè)置將要加入到URL的變量。使用Name屬性指定即可。

    3、<pg:index>這個(gè)標(biāo)簽說明分頁(yè)顯示開始了。跳進(jìn)我們Include的頁(yè)面。再看看詳細(xì)的情況。

    三、分頁(yè)顯示頁(yè)面

    <% @?page?session = " false " ?contentType = " text/html;charset=utf-8 " %>
    <% @?taglib?uri = " http://jsptags.com/tags/navigation/pager " ?prefix = " pg " ? %>
    < pg:first >
    ??
    < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?# <%= ?pageNumber? %> ?首頁(yè)?] </ nobr ></ a >
    </ pg:first >
    < pg:skip?pages = " <%=?-5?%> " >
    ??
    < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?# <%= ?pageNumber? %> ?后退?] </ nobr ></ a >
    </ pg:skip >
    < pg:prev >
    ??
    < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?# <%= ?pageNumber? %> ?前一頁(yè)?] </ nobr ></ a >
    </ pg:prev >
    < pg:pages >
    ???
    < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " ><%= ?pageNumber? %></ a > ?
    </ pg:pages >
    < pg:next >
    ??
    < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?下一頁(yè)?# <%= ?pageNumber? %> ?] </ nobr ></ a >
    </ pg:next >
    < pg:skip?pages = " <%=?5?%> " >
    ??
    < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?跳進(jìn)?# <%= ?pageNumber? %> ?] </ nobr ></ a >
    </ pg:skip >
    < pg:last >
    ??
    < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?尾頁(yè)?# <%= ?pageNumber? %> ?] </ nobr ></ a >
    </ pg:last >


    沒錯(cuò),你看到的這些標(biāo)簽都是導(dǎo)航標(biāo)簽。很容易明白,用法基本上一致,從標(biāo)簽的名字上就能看出是什么作用。告訴你我動(dòng)了手腳的地方就是我在每一個(gè)PageUrl后面都加了&pageNo=<%= pageNumber %>。讓我們的URL帶上頁(yè)碼的參數(shù),這樣程序可以拿到頁(yè)碼去查找所需要的數(shù)據(jù)。

    結(jié)果很理想。在SpringSide領(lǐng)了個(gè)分頁(yè)標(biāo)簽的任務(wù),原來還想著自已實(shí)現(xiàn)一套標(biāo)簽的。還好被白衣喝住了。。卡卡。摸清楚了整套標(biāo)簽的使用方法后,很容易就可以把一些重復(fù)的東西再稍作封裝,變成有“特色”的東西。幸虧沒有重復(fù)發(fā)明輪子(臉紅啊,還發(fā)明呢~~~)。

    ???????天色已早。這幾天再繼續(xù)研究和“拿來”。有經(jīng)驗(yàn)再一起交流。。


    參考資料:
    http://jsptags.com/tags/navigation/pager/index.jsp?Pager-taglibs官網(wǎng)
    http://www.springside.org.cn/?SpringSide 春天的旁邊(需要我們的參與)

    posted on 2006-06-27 02:22 艾塵 閱讀(6153) 評(píng)論(7)  編輯  收藏 所屬分類: pick up

    評(píng)論

    # re: pager-taglib 體驗(yàn) 2006-09-18 13:15 賭東道事實(shí)

    < a href = " <%= pageUrl %>&pageNo=<%= pageNumber %> " ><%= pageNumber %></ a >

    如果我用的是控制器(比如說控制器請(qǐng)求地址是:test.shtml),pageUrl 應(yīng)該怎么寫???  回復(fù)  更多評(píng)論   

    # re: pager-taglib 體驗(yàn) 2006-09-23 18:21 fsd

    @賭東道事實(shí)
    fd  回復(fù)  更多評(píng)論   

    # re: pager-taglib 體驗(yàn)[未登錄] 2007-01-18 21:47 Luke

    看了你的介紹覺得很好,但是運(yùn)行你的代碼,沒運(yùn)行出來,如果方便的話希望能寫一個(gè)完整的例子(代碼)出來,如果可以的話希望能發(fā)到我的郵箱ln1058@163.com
    謝了!  回復(fù)  更多評(píng)論   

    # re: pager-taglib 體驗(yàn) 2007-02-10 21:24 事實(shí)

    真的很垃圾,在jsp頁(yè)面中怎么能用<%%>著玩意兒  回復(fù)  更多評(píng)論   

    # re: pager-taglib 體驗(yàn) 2007-02-10 21:28 事實(shí)

    我希望jsp只作為view,不要有一切邏輯;筆者能給出ExtremeTable(數(shù)據(jù)呈現(xiàn))+Pager-taglib(分頁(yè)呈現(xiàn))的解決方案嗎?  回復(fù)  更多評(píng)論   

    # re: pager-taglib 體驗(yàn) 2007-02-10 21:30 事實(shí)

    分頁(yè)數(shù)據(jù)在dao層進(jìn)行,將得到的數(shù)據(jù)給ExtremeTable(數(shù)據(jù)呈現(xiàn))+Pager-taglib(分頁(yè)呈現(xiàn))呈現(xiàn)  回復(fù)  更多評(píng)論   

    # re: pager-taglib 體驗(yàn) 2008-10-31 15:43 machey

    pager.offset這個(gè)參數(shù)能否變換,考慮一下如何變換  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 人人狠狠综合久久亚洲高清| 在线播放免费人成视频在线观看| 一级特黄录像视频免费| 亚洲国产成人久久一区二区三区 | 久久久久高潮毛片免费全部播放| 成年大片免费视频播放一级| 黄页网站在线免费观看| 深夜a级毛片免费视频| 精品亚洲成A人在线观看青青| 亚洲欧美中文日韩视频| 亚洲国产成人综合精品| 毛片亚洲AV无码精品国产午夜| 丰满亚洲大尺度无码无码专线 | 久久久亚洲欧洲日产国码二区| 操美女视频免费网站| 和日本免费不卡在线v| rh男男车车的车车免费网站| 精品免费久久久久国产一区 | 黄色三级三级三级免费看| 色多多免费视频观看区一区| 人妻仑乱A级毛片免费看| www成人免费观看网站| a级男女仿爱免费视频| 久久免费精彩视频| 亚洲视频免费播放| 99精品免费视频| 无码日韩精品一区二区三区免费| 久久精品无码专区免费东京热| 亚洲成年人免费网站| 天天天欲色欲色WWW免费| 内射无码专区久久亚洲| 亚洲人成精品久久久久| 色拍自拍亚洲综合图区| 亚洲国产日韩综合久久精品| jzzijzzij在线观看亚洲熟妇| www免费插插视频| 最近中文字幕mv免费高清在线 | 永久免费av无码网站yy| 67194熟妇在线永久免费观看 | 亚洲一区免费视频| 在线看片无码永久免费aⅴ|