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

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

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

    kelefa  
    大千世界中,唯一缺乏的就是人類的注意力。
    日歷
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456
    統計
    • 隨筆 - 11
    • 文章 - 0
    • 評論 - 28
    • 引用 - 0

    導航

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     
    ?在某個項目中,經過幾個同事的修改, 最終得到這個支持分頁的action基類, 使用非常簡單:

    1. 在寫action類時把派生ActionSupport類改成派生這個PaginationSupportAction類
    2. 實現這兩個抽象方法, 其中doExecute方法就是你原來的execute方法的代碼, queryCount()返回符合條件的記錄數

    ????
    /**
    ?????*?just?like?interface?Action?:?public?String?execute()
    ?????*?
    ?????*?
    @throws?Exception
    ?????*?
    @return?String?the?same?as?execute()?interface
    ?????
    */

    ????
    protected?abstract?String?doExecute()
    ????????????
    throws?Exception;

    ????
    /**
    ?????*?query?the?item?count
    ?????*?
    ?????*?
    @return?int
    ?????
    */

    ????
    protected?abstract?int?queryCount()
    ????????????
    throws?Exception;
    3. 在jsp顯示記錄的下面添加:
    <%@?include?file="../common/pagination.jsp"%>

    下面是這兩個文件的源代碼:

    PaginationSupportAction.java:
    package?com.kelefa.common.action;

    import?java.util.Enumeration;
    import?java.util.HashMap;
    import?java.util.LinkedList;
    import?java.util.List;
    import?java.util.Map;
    import?javax.servlet.http.HttpServletRequest;

    import?org.apache.log4j.Logger;
    import?com.opensymphony.webwork.ServletActionContext;
    import?com.opensymphony.xwork.ActionSupport;

    /**
    ?*?<pre>
    ?*?????分頁action的基類,需要分頁的action可繼承這個類,并實現以下2個抽象方法
    ?*?????????protected?abstract?String?doExecute()?throws?Exception?;
    ?*?????????protected?abstract?int?queryCount();
    ?*?</pre>
    ?*?
    ?*?<p>
    ?*?Copyright:?Copyright?(c)?2005
    ?*?</p>
    ?*?
    ?*?
    @author?楊杰榮
    ?*?
    @version?1.0
    ?
    */

    public?abstract?class?PaginationSupportAction
    ????????
    extends?ActionSupport
    {
    ????
    private?static?final?Logger?log?=?Logger
    ????????????.getLogger(?PaginationSupportAction.
    class?);

    ????
    protected?String?pageUrl;

    ????
    protected?int?pageList?=?15;?//?從action.xml傳遞過來的每頁記錄數

    ????
    protected?int?pageNo?=?1;

    ????
    protected?int?itemCount;

    ????
    protected?int?pageCount;

    ????
    protected?String?preUrl;

    ????
    protected?String?nextUrl;

    ????
    protected?String?firstUrl;

    ????
    protected?String?lastUrl;

    ????
    protected?List?pageJumpParameters;

    ????
    public?PaginationSupportAction()
    ????
    {
    ????}


    ????
    private?void?getURL()
    ????
    {
    ????????
    //?if?(?pageUrl?!=?null?)?//?在action-*****.xml里設置了
    ????????
    //?pageUrl?=?null;

    ????????HttpServletRequest?request?
    =?ServletActionContext.getRequest();
    ????????String?servletPath?
    =?(String)?request
    ????????????????.getAttribute(?
    "javax.servlet.include.servlet_path"?);

    ????????
    if?(?servletPath?==?null?)
    ????????
    {
    ????????????servletPath?
    =?request.getServletPath();
    ????????}


    ????????
    int?beginIdx?=?servletPath.lastIndexOf(?"/"?);
    ????????
    int?endIdx?=?servletPath.lastIndexOf(?"."?);

    ????????StringBuffer?strbuf?
    =?new?StringBuffer();

    ????????strbuf.append(?servletPath.substring(?((beginIdx?
    ==?-1)???0
    ????????????????:?(beginIdx?
    +?1)),?(endIdx?==?-1)???servletPath.length()?:?endIdx?)?);

    ????????
    int?end?=?servletPath.indexOf(?"?",?endIdx?);
    ????????
    if?(?end?==?-1?)
    ????????????end?
    =?servletPath.length();
    ????????strbuf.append(?servletPath.substring(?endIdx,?end?)?);

    ????????pageJumpParameters?
    =?getPageJumpParameters(?"pageNo,submit,go"?);
    ????????
    for?(?int?i?=?0;?i?<?pageJumpParameters.size();?i++?)
    ????????
    {
    ????????????Map?map?
    =?(Map)?pageJumpParameters.get(?i?);
    ????????????String?paraName?
    =?(String)?map.get(?"paraName"?);
    ????????????String?paraVal?
    =?(String)?map.get(?"paraVal"?);

    ????????????
    if?(?i?==?0?)
    ????????????
    {
    ????????????????strbuf.append(?
    "?"?);
    ????????????}

    ????????????
    else
    ????????????
    {
    ????????????????strbuf.append(?
    "&"?);
    ????????????}

    ????????????strbuf.append(?paraName?).append(?
    "="?).append(?paraVal?);
    ????????}


    ????????pageUrl?
    =?strbuf.toString();

    ????????log.debug(?
    "pageUrl?=?"?+?pageUrl?);
    ????}


    ????
    public?String?execute()
    ????????????
    throws?Exception
    ????
    {
    ????????String?result?
    =?doExecute();
    ????????getURL();
    ????????initParam();
    ????????
    return?result;
    ????}


    ????
    /**
    ?????*?just?like?interface?Action?:?public?String?execute()
    ?????*?
    ?????*?
    @throws?Exception
    ?????*?
    @return?String?the?same?as?execute()?interface
    ?????
    */

    ????
    protected?abstract?String?doExecute()
    ????????????
    throws?Exception;

    ????
    /**
    ?????*?query?the?item?count
    ?????*?
    ?????*?
    @return?int
    ?????
    */

    ????
    protected?abstract?int?queryCount()
    ????????????
    throws?Exception;

    ????
    protected?void?initParam()
    ????????????
    throws?Exception
    ????
    {
    ????????
    if?(?pageUrl.indexOf(?"?"?)?>?-1?)
    ????????????pageUrl?
    +=?"&";
    ????????
    else
    ????????????pageUrl?
    +=?"?";

    ????????itemCount?
    =?queryCount();
    ????????pageCount?
    =?(itemCount?+?pageList?-?1)?/?pageList;
    ????????
    if?(?pageNo?>?pageCount?)
    ????????????pageNo?
    =?1;

    ????????
    if?(?pageNo?>?1?)
    ????????
    {
    ????????????preUrl?
    =?"<A?href=\""?+?pageUrl?+?"pageNo="?+?(pageNo?-?1)?+?"\">上一頁</A>";
    ????????????firstUrl?
    =?"<A?href=\""?+?pageUrl?+?"pageNo=1\">首頁</A>";
    ????????}

    ????????
    else
    ????????
    {
    ????????????preUrl?
    =?"上一頁";
    ????????????firstUrl?
    =?"首頁";
    ????????}


    ????????
    if?(?pageNo?<?pageCount?)
    ????????
    {
    ????????????nextUrl?
    =?"<A?href=\""?+?pageUrl?+?"pageNo="?+?(pageNo?+?1)
    ????????????????????+?"\">下一頁</A>";
    ????????????lastUrl?=?"<A?href=\""?+?pageUrl?+?"pageNo="?+?pageCount?+?"\">尾頁</A>";
    ????????}

    ????????
    else
    ????????
    {
    ????????????nextUrl?
    =?"下一頁";
    ????????????lastUrl?
    =?"尾頁";
    ????????}

    ????}


    ????
    private?List<Map>?getPageJumpParameters(?String?para_disuse?)
    ????
    {
    ????????List
    <Map>?result?=?new?LinkedList<Map>();
    ????????
    if?(?para_disuse?==?null?||?para_disuse.trim().length()?==?0?)
    ????????
    {
    ????????????para_disuse?
    =?"pageNo,submit";
    ????????}

    ????????HttpServletRequest?request?
    =?ServletActionContext.getRequest();
    ????????String?para_name?
    =?"";?//?參數名稱
    ????????Enumeration?em?=?request.getParameterNames();
    ????????para_disuse?
    =?para_disuse.toLowerCase();
    ????????
    while?(?em.hasMoreElements()?)
    ????????
    {
    ????????????para_name?
    =?(String)?em.nextElement();
    ????????????
    if?(?para_disuse.indexOf(?para_name.toLowerCase()?)?==?-1?)?//?先轉換參數名稱為小寫,再比較
    ????????????{
    ????????????????String?para_val?
    =?request.getParameter(?para_name?)?==?null???""
    ????????????????????????:?request.getParameter(?para_name?);
    ????????????????
    if?(?para_val.trim().length()?>?0?)
    ????????????????
    {
    ????????????????????log.debug(?para_name?
    +?"="?+?para_val?);
    ????????????????????Map
    <String,?String>?para_map?=?new?HashMap<String,?String>();
    ????????????????????para_map.put(?
    "paraName",?para_name?);
    ????????????????????para_map.put(?
    "paraVal",?para_val.toString()?);
    ????????????????????result.add(?para_map?);
    ????????????????}

    ????????????}

    ????????}


    ????????
    return?result;
    ????}


    ????
    public?int?getItemCount()
    ????
    {
    ????????
    return?itemCount;
    ????}


    ????
    public?String?getNextUrl()
    ????
    {
    ????????
    return?nextUrl;
    ????}


    ????
    public?int?getPageCount()
    ????
    {
    ????????
    return?pageCount;
    ????}


    ????
    public?List?getPageJumpParameters()
    ????
    {
    ????????
    return?pageJumpParameters;
    ????}


    ????
    public?int?getPageList()
    ????
    {
    ????????
    return?pageList;
    ????}


    ????
    public?int?getPageNo()
    ????
    {
    ????????
    return?pageNo;
    ????}


    ????
    public?String?getPageUrl()
    ????
    {
    ????????
    return?pageUrl;
    ????}


    ????
    public?String?getPreUrl()
    ????
    {
    ????????
    return?preUrl;
    ????}


    ????
    public?void?setItemCount(?int?itemCount?)
    ????
    {
    ????????
    this.itemCount?=?itemCount;
    ????}


    ????
    public?void?setNextUrl(?String?nextUrl?)
    ????
    {
    ????????
    this.nextUrl?=?nextUrl;
    ????}


    ????
    public?void?setPageCount(?int?pageCount?)
    ????
    {
    ????????
    this.pageCount?=?pageCount;
    ????}


    ????
    public?void?setPageJumpParameters(?List?pageJumpParameters?)
    ????
    {
    ????????
    this.pageJumpParameters?=?pageJumpParameters;
    ????}


    ????
    public?void?setPageList(?int?pageList?)
    ????
    {
    ????????
    this.pageList?=?pageList;
    ????}


    ????
    public?void?setPageNo(?int?pageNo?)
    ????
    {
    ????????
    this.pageNo?=?pageNo;
    ????}


    ????
    public?void?setPageUrl(?String?pageUrl?)
    ????
    {
    ????????
    this.pageUrl?=?pageUrl;
    ????}


    ????
    public?void?setPreUrl(?String?preUrl?)
    ????
    {
    ????????
    this.preUrl?=?preUrl;
    ????}


    ????
    public?String?getFirstUrl()
    ????
    {
    ????????
    return?firstUrl;
    ????}


    ????
    public?void?setFirstUrl(?String?firstUrl?)
    ????
    {
    ????????
    this.firstUrl?=?firstUrl;
    ????}


    ????
    public?String?getLastUrl()
    ????
    {
    ????????
    return?lastUrl;
    ????}


    ????
    public?void?setLastUrl(?String?lastUrl?)
    ????
    {
    ????????
    this.lastUrl?=?lastUrl;
    ????}

    }

    pagination.jsp:
    <%@?page?contentType="text/html;?charset=GBK"%>
    <%@?taglib?uri="webwork"?prefix="ww"%>

    <TABLE?class="Pager"?align="center">
    ????
    <TBODY>
    ????????
    <TR>
    ????????????
    <TD?class="PagerLeftTd"><ww:property?value="itemCount"?/>&nbsp;&nbsp;<ww:property
    ????????????????
    value="pageNo"?/>/<ww:property?value="pageCount"?/></TD>
    ????????????
    <TD?nowrap></TD>
    ????????????
    <TD?class="SpaceWidth"></TD>
    ????????????
    <TD?nowrap></TD>
    ????????????
    <TD?class="SpaceWidth"></TD>
    ????????????
    <TD?nowrap><ww:property?value="firstUrl"?escape="false"?/></TD>
    ????????????
    <TD?class="SpaceWidth"></TD>
    ????????????
    <TD?nowrap><ww:property?value="preUrl"?escape="false"?/></TD>
    ????????????
    <TD?class="SpaceWidth"></TD>
    ????????????
    <TD?nowrap><ww:property?value="nextUrl"?escape="false"?/></TD>
    ????????????
    <TD?class="SpaceWidth"></TD>
    ????????????
    <TD?nowrap><ww:property?value="lastUrl"?escape="false"?/></TD>

    ????????
    </TR>
    ????
    </TBODY>
    </TABLE>
    posted on 2006-12-28 08:46 楊杰榮 閱讀(2730) 評論(10)  編輯  收藏 所屬分類: webwork,hibernate
    評論:
    • # re: 一個簡單易用的webwork分頁action基類  wolfsquare Posted @ 2006-12-29 14:15
      my god,居然還有人這樣用ww2,解藕解藕到了你這又成藕合了.  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類  楊杰榮 Posted @ 2006-12-29 14:43
      @wolfsquare
      你說的藕合是指PaginationSupportAction.java中的變量和pagination.jsp的property藕合嗎, 其實任何一個webwork的action dispatcher到一個jsp時都有這個問題啊, 除非你的view都是靜態內容.
      使用這個方法, 無論是post還是get的請求, 都能生成正確的分頁URL, 而且不用多寫一行代碼, 不用考慮參數的個數, 不用考慮參數值.
      請問你是怎么不藕合的實現這個分頁的呢? 多謝指教!  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類  開源狂人[匿名] Posted @ 2006-12-31 08:25
      垃圾阿,這種水準就不要寫日志了  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類  ne Posted @ 2007-10-15 21:46
      老大,給個完整的例子可以嗎?
      ne.programmer@163.com

      3q  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類  爬樹魚 Posted @ 2008-01-15 11:16
      大哥,給我一個完整的例子吧,我快郁悶死了!  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類  爬樹魚 Posted @ 2008-01-15 11:17
      我的郵箱shenlingao@126.com  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類  龍江 Posted @ 2008-04-15 09:20
      大哥,給我一個完整的例子吧,
      郵箱:longjiang@timesnet.cn  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類   Posted @ 2008-05-26 21:31
      太感謝了!?。。。。。?!太好用了!?。。。。。。?nbsp; 回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類[未登錄]  rose Posted @ 2008-09-28 13:45
      大哥,也給我一個完整的例子吧!
      郵箱:szdrose@21cn.com  回復  更多評論   

    • # re: 一個簡單易用的webwork分頁action基類[未登錄]   Posted @ 2009-02-06 10:02
      給我也發一份吧~~~~ljh_love2@Hotmail.com  回復  更多評論   

     
    Copyright © 楊杰榮 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲国产精品无码久久久秋霞2 | 中文字幕第一页亚洲| 国产精品免费大片一区二区| 亚洲v高清理论电影| 免费看少妇作爱视频| 久久免费国产精品| 亚洲人成人77777网站不卡| 免费一级毛片在线播放不收费| 日韩电影免费观看| 风间由美在线亚洲一区| 亚洲AV无码国产丝袜在线观看| 毛片免费在线观看网址| 91在线免费视频| 亚洲精品国产高清在线观看| 国产av无码专区亚洲av桃花庵| 午夜a级成人免费毛片| 久久免费国产视频| 日韩在线观看视频免费 | 丰满少妇作爱视频免费观看| 久久亚洲AV无码精品色午夜麻豆| 国产成人免费片在线观看 | 24小时日本在线www免费的| 成在线人视频免费视频| 亚洲av中文无码字幕色不卡| 亚洲国产香蕉碰碰人人| 久久久久国产亚洲AV麻豆| 免费黄色毛片视频| 51视频精品全部免费最新| gogo免费在线观看| 亚洲国产欧美日韩精品一区二区三区 | 亚洲日本中文字幕区| 亚洲精品国精品久久99热| 最近最新的免费中文字幕| 亚洲免费视频网站| 中文在线观看国语高清免费| WWW国产亚洲精品久久麻豆| 久久精品国产亚洲αv忘忧草| 亚洲成A人片在线观看WWW| 亚洲男人的天堂在线va拉文| 日韩一级在线播放免费观看| 一个人免费观看在线视频www|