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

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

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

    當(dāng)柳上原的風(fēng)吹向天際的時(shí)候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

     

     

     

     

     

     

    Teambiz中后臺(tái)參數(shù)容器RequestParamMap

     

     

     

     

     

     

     

    作者:何楊

    撰寫日期:2012年2月27日

    版本:1.00

    更新日期:  

     

     

    第一部分:功能說明

    簡(jiǎn)化頁(yè)面請(qǐng)求參數(shù)的取值和存放,解決亂碼問題,并簡(jiǎn)化數(shù)據(jù)傳輸通道上函數(shù)參數(shù)的編寫。

    第二部分:核心組件

    名稱

    路徑

    說明

    RequestParamMap

    teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java

    它是一個(gè)頁(yè)面請(qǐng)求參數(shù)的容器,內(nèi)含一個(gè)哈希表,以鍵值對(duì)的方式來存儲(chǔ)請(qǐng)求參數(shù)的名和值。

    它的構(gòu)造函數(shù)接受一個(gè)哈希表,這個(gè)哈希表在AjaxAction的getRequestParamMap函數(shù)中被生成,并傳入強(qiáng)制子類實(shí)現(xiàn)的process函數(shù)中,因此每個(gè)繼承自AjaxAction的類中直接使用RequestParamMap對(duì)象即可,無需考慮它的由來。

    有一點(diǎn)需要說明的是,由于非ASC碼字符在URL中是不允許的,因此在使用Ajax.Request對(duì)象發(fā)起請(qǐng)求前使用javaScript函數(shù)eval兩次對(duì)url進(jìn)行轉(zhuǎn)碼,與之對(duì)應(yīng)的,在AjaxAction的getRequestParamMap函數(shù)中使用UTF8Coder類decode方法又將其還原了回來,因此程序員無需擔(dān)心亂碼問題。

    getParamValue

    teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java中同名函數(shù)。

    程序員可以參數(shù)名為單位,使用這個(gè)函數(shù)取出參數(shù)的值,當(dāng)參數(shù)名不存在,即請(qǐng)求參數(shù)中沒有后臺(tái)想要的值,一個(gè)異常將被拋出。按照teamBiz的異常傳遞體系,這個(gè)異常會(huì)在用戶界面上顯示出來,這樣做有助于問題的快速定位。

    addParam

    teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java中同名函數(shù)。

    程序員可以將參數(shù)名和參數(shù)值添加到RequestParamMap,設(shè)計(jì)這個(gè)函數(shù)的考慮到很多參數(shù)如用戶信息在請(qǐng)求中往往是不見的,需要在Action中從session或是其它地方取出再往后方傳遞。

     

    第三部分:有關(guān)RequestParamMap使用的代碼

    1. RequestParamMap類的代碼

    /**

     * 頁(yè)面請(qǐng)求參數(shù)容器

     * @author 何楊(heyanghy@cn.ibm.com)

     * @version 1.00

     * @time Feb 6, 2012 10:47:39 AM

     *

     */

    public class RequestParamMap{

                // 存儲(chǔ)頁(yè)面請(qǐng)求參數(shù)的哈希表

                private Map<String,String> map;           

                /**

                 * 構(gòu)造函數(shù)

                 * @param map

                 */

                public RequestParamMap(Map<String,String> map){

                            this.map=map;

                }          

                /**

                 * 按請(qǐng)求參數(shù)的名稱取得請(qǐng)求參數(shù)的值

                 * @param paramName

                 * @return

                 */

                public String getParamValue(String paramName) throws IllegalArgumentException{

                            if(map.containsKey(paramName)){

                                        return map.get(paramName);

                            }else{

                                       throw new IllegalArgumentException("找不到名為"+paramName+"的頁(yè)面請(qǐng)求參數(shù).");

                            }

                }

               

                /**

                 * 添加一個(gè)參數(shù)

                 * @param paramName

                 * @param paramValue

                 */

                public void addParam(String paramName,String paramValue){

                            map.put(paramName, paramValue);

                }

    }

    以上代碼路徑:teambiz\src\com\ibm\heyang\action\base\RequestParamMap.java

     

    2. AjaxAction的getRequestParamMap函數(shù)

    private RequestParamMap getRequestParamMap(HttpServletRequest request){

                Map<String,String> map=new HashMap<String,String>();

               

                for (Enumeration<?> e = request.getParameterNames(); e.hasMoreElements();) {

                            String name = (String) e.nextElement();

                            String[] values = request.getParameterValues(name);

                           

                            if (values != null && values.length >= 1) {

                                        String value=UTF8Coder.decode(values[0]);

                                        map.put(name, value);

                            }

                }

               

                return new RequestParamMap(map);

    }

    以上代碼路徑:teambiz\src\com\ibm\heyang\action\base\AjaxAction.java

     

    3.繼承自AjaxAction的Action類中對(duì)RequestParamMap的使用

    public final class FetchExecuterAction extends AjaxAction {

                private static Logger logger = Logger.getLogger(FetchExecuterAction.class);

               

                public void process(ActionMapping mapping, ActionForm form,

                                        HttpServletRequest request, HttpServletResponse response,RequestParamMap paramMap)

                                        throws Exception {

                            logger.trace("取得執(zhí)行者名單Action");

                                       

                            // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                            PrintWriter out = response.getWriter();

                                       

                            RelationService service=SpringUtil.getRelationService();

                            Long userId=(Long)request.getSession().getAttribute("userId");

                            if(userId!=null){

                                        paramMap.addParam("userId", String.valueOf(userId));

                                        paramMap.addParam("userName", "自己");

                                        paramMap.addParam("status", Relation.Status_Agree);

                                       

                                        String xml=service.getExecuterXml(paramMap);

                                       

                                        out.println("<response>");

                                        out.println("<status>ok</status>");

                                        out.println(xml);

                                        out.println("</response>");

                                       

                            }else{

                                        out.println("<response>");

                                        out.println("<status>ng</status>");

                                        out.println("<text>請(qǐng)登錄后再來執(zhí)行此操作</text>");

                                        out.println("</response>");

                            }

                }

    }

    以上代碼來自:teambiz\src\com\ibm\heyang\action\relation\FetchExecuterAction.java

     

    4.后臺(tái)DAO類對(duì)RequestParamMap的使用

    public String getExecuterXml(RequestParamMap paramMap) throws Exception{

                String userId=paramMap.getParamValue("userId");

                String userName=paramMap.getParamValue("userName");

                String status=paramMap.getParamValue("status");

               

                StringBuilder sb=new StringBuilder();

                sb.append("    select");

                sb.append("        tb01.toUserId as id,");

                sb.append("        tb02.name as name");

                sb.append("    from");

                sb.append("        teambiz_relation");

                sb.append("        tb01,");

                sb.append("        teambiz_user");

                sb.append("        tb02");

                sb.append("    where");

                sb.append("        tb01.toUserId=tb02.id");

                sb.append("        and");

                sb.append("        tb01.fromUserId="+userId+"");

                sb.append("        and");

                sb.append("        tb01.status='"+status+"'");

                sb.append("    order by");

                sb.append("        tb01.id");

                String sql=sb.toString();

               

                List<?> ls=fetchRecords(sql,new NameValueRowMapper());

               

                StringBuilder sb2=new StringBuilder();

                sb2.append(new NameValueList(ls).asXML());

                sb2.append("<node>");

                sb2.append("<id>"+userId+"</id>");

                sb2.append("<name>"+userName+"</name>");

                sb2.append("</node>");

               

                return sb2.toString();

    }

    以上代碼來自:teambiz\src\com\ibm\heyang\dao\RelationDao.java

     

    第四部分:小結(jié)

    函數(shù)參數(shù)如果雜亂很不利于一些基類中共通函數(shù)的編寫,比如分頁(yè)函數(shù),在RequestParamMap類的幫助下,這個(gè)問題能夠得到解決。它附帶的自動(dòng)生成對(duì)象,解碼,無參數(shù)時(shí)拋出異常要給程序中參數(shù)的取值,轉(zhuǎn)碼和異常處理帶來了方便.

    RequestParamMap類體積很小,功能也不復(fù)雜,但對(duì)后臺(tái)的整個(gè)代碼結(jié)構(gòu)的改善帶來了莫大好處,類似這種組件是值得發(fā)掘的。

     

    posted on 2012-02-29 10:41 何楊 閱讀(415) 評(píng)論(0)  編輯  收藏 所屬分類: Teambiz
    主站蜘蛛池模板: 思思99re66在线精品免费观看| 香蕉视频在线观看免费| a级毛片黄免费a级毛片| 亚洲国产小视频精品久久久三级 | 一级毛片直播亚洲| 亚洲人成色4444在线观看| 国产精品久久久久久久久久免费| 色在线亚洲视频www| 无码中文字幕av免费放| 国产亚洲成在线播放va| 亚洲中文字幕成人在线| 西西人体免费视频| 免费国产va在线观看| 亚洲国产精品va在线播放| 午夜无码A级毛片免费视频| 亚洲人成在线播放| 国产免费观看a大片的网站| 一个人免费观看日本www视频| 国产亚洲精品不卡在线| 91高清免费国产自产拍2021| 色噜噜亚洲男人的天堂| 亚洲精品视频在线播放| 国产免费变态视频网址网站| 在线观看av永久免费| 99热在线精品免费全部my| 30岁的女人韩剧免费观看| 亚洲高清国产拍精品熟女| 国产成人精品日本亚洲专区61| 人妻丰满熟妇无码区免费| 黄色一级免费网站| 色偷偷亚洲第一综合网| 亚洲人成网址在线观看| 啦啦啦高清视频在线观看免费 | 成人A毛片免费观看网站| 亚洲色成人网一二三区| 国产伦精品一区二区三区免费下载| 无码中文在线二区免费| 女人18特级一级毛片免费视频| 噼里啪啦电影在线观看免费高清| 大学生一级毛片免费看| 天天摸夜夜摸成人免费视频|