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

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

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

    隨筆-348  評論-598  文章-0  trackbacks-0
    最近寫了一個JSF的動態控件生成框架給項目組使用。昨天有個同事在使用的過程中遇到一個問題,就是我生成的帶AjaxSupport的動態控件在調用他自己寫的方法之后出現了整個頁面的action均無效的情況,現象就是,兩個級聯下拉,當地一個下拉選項改變時,觸發他寫的方法,他改變第二個下拉,但是當重復該操作之后就無效了,也沒有錯誤和異常,代碼如下:

    同事代碼:
     1 public void bignessDangeValueChangeListener(ActionEvent e) {
     2         //System.out.println(e.getComponent().getParent().getChildCount());
     3         org.ajax4jsf.component.html.HtmlAjaxSupport ajaxSupport = (org.ajax4jsf.component.html.HtmlAjaxSupport)e.getComponent();
     4         HtmlSelectOneMenu parent = (HtmlSelectOneMenu)ajaxSupport.getParent();
     5         Short value = (Short)parent.getValue();
     6         String[] idDetails = parent.getId().split("_");
     7         StringBuffer controlId = new StringBuffer();
     8         controlId.append(idDetails[0]);
     9         if (WebUtil.PROPS_FILE_NAME_TRASH_DISCHARGE.equals(idDetails[0])) {
    10             idDetails[1]="hazardousSubstance"//配置文件中配置的二級聯動的二級控件的name字段
    11         }
    12         
    13         for (int i = 1;i < idDetails.length;i++){
    14             controlId.append("_").append(idDetails[i]);
    15         }
    16         
    17         ajaxSupport.setReRender(controlId.toString());
    18         
    19         List<BignessDangerInfo> list = Common.getBignessDangerInfoByObjType(value);
    20         List<String> labelList = new ArrayList<String>();
    21         List<Integer> valueList = new ArrayList<Integer>();
    22         for(BignessDangerInfo bdi : list) {
    23             labelList.add(bdi.getObjectName());
    24             valueList.add(String.valueOf(bdi.getRecuid()));
    25         }
    26         
    27 
    28         
    29         if(value == 1 || value == 2 || value == 3 || value == 4) {
    30             DynamicControlFactory.initSelectValues(e, idDetails[1], labelList, valueList);
    31         }  else {
    32             List<List<String>> listClear = new ArrayList<List<String>>();
    33             List<String> temp1 = new ArrayList<String>();
    34             List<String> temp2 = new ArrayList<String>();
    35             temp1.add("-1");
    36             temp2.add("--請選擇--");
    37             listClear.add(temp1);
    38             listClear.add(temp2);
    39             DynamicControlFactory.initSelectValues(e, idDetails[1], listClear.get(1), listClear.get(0));
    40         }
    41     }

    initSelectValues的相關代碼:
     1public static void initSelectValues(ActionEvent e, String col, List<String> labels, List<String> values)
     2    {
     3        try {
     4
     5            String[] parms = e.getComponent().getParent().getId().split("_");
     6            DynamicControlObject dco = getControlObjects().get(parms[0]);
     7            
     8            List<String> colList = dco.getColNameList();
     9            String prefix = dco.getFormName() + ":" + parms[0];
    10            
    11            Map cos = new HashMap();
    12            String rowIdx = parms[parms.length - 1];
    13
    14            initSelectOneComponent(findComponent(prefix + "_" + col + "_1" + "_"
    15                    + rowIdx),  values, labels, true);
    16        }
     catch (Exception ex) {
    17            ex.printStackTrace();
    18        }

    19    }

     1public static void initSelectOneComponent(UIComponent component,
     2            List<String> values, List<String> labels, boolean clearBefore) {
     3        try {
     4
     5            if (component == null || values == null || labels == null
     6                    )
     7                return;
     8
     9            if (!isMultiValue(component))
    10                return;
    11
    12            Object optionKey = null;
    13            String optionLabel = null;
    14            ArrayList optionsList = null;
    15
    16            UISelectItems items = new UISelectItems();
    17            optionsList = new ArrayList(values.size());
    18            for (int i = 0; i < values.size(); i++{
    19                optionKey = values.get(i);
    20                optionLabel = (String)labels.get(i);
    21                SelectItem item = new SelectItem(optionKey, optionLabel);
    22                optionsList.add(item);
    23            }

    24            items.setValue(optionsList);
    25            if(clearBefore)
    26            {
    27                List list = component.getChildren();
    28                Object obj = null;
    29                for(int i = 0;i < list.size(); i ++)
    30                {
    31                    if(list.get(i) instanceof UISelectItems )
    32                    {
    33                        obj = list.get(i);
    34                        break;
    35                    }

    36                }

    37                if(obj != null)
    38                    list.remove(obj);
    39            }

    40                
    41            component.getChildren().add(items);
    42        }
     catch (Exception e) {
    43            e.printStackTrace();
    44        }

    45
    46    }

    檢查了半天,發現只要不執行initSelectValues,都沒有問題,后來一步一步調試才發現,原來是數據類型的問題,同事傳入的是List<Integer> values,而SelectItem構造函數支持的是鍵值都為String的參數,數據類型不對導致了這一個奇怪的現象,但后臺沒有異常和出錯信息讓人很納悶,解決方法就是只要改變值列表為List<String>就可以了。

    ---------------------------------------------------------
    專注移動開發

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2009-11-18 09:02 TiGERTiAN 閱讀(1517) 評論(2)  編輯  收藏 所屬分類: JavaJSF

    評論:
    # re: [JSF]手動初始化選擇控件 頁面所有action均失效的問題 2009-11-19 01:12 | huliqing
    感覺很久沒有看到關于JSF的文章了呢,呵呵!  回復  更多評論
      
    # re: [JSF]手動初始化選擇控件 頁面所有action均失效的問題 2009-11-19 08:39 | TiGERTiAN
    @huliqing
    可能用的不多吧,開發了幾個項目,感覺jsf還是有些不方便的地方,不過小項目練練手還是不錯的,呵呵。  回復  更多評論
      
    主站蜘蛛池模板: 国产真人无码作爱免费视频| 色视频在线观看免费| 免费精品99久久国产综合精品| 国产免费变态视频网址网站 | 免费精品国产自产拍在线观看图片| 中文字幕亚洲日韩无线码| 一区二区视频在线免费观看| 亚洲国产精品无码久久久久久曰| 污网站免费在线观看| 亚洲?V乱码久久精品蜜桃| 成年大片免费高清在线看黄| 亚洲中文字幕无码专区| 巨胸狂喷奶水视频www网站免费| 国内精品99亚洲免费高清| 在线毛片片免费观看| 婷婷亚洲久悠悠色悠在线播放 | 亚洲av乱码中文一区二区三区| 女人与禽交视频免费看| 99亚洲乱人伦aⅴ精品| 亚洲高清国产拍精品青青草原 | 57pao一国产成视频永久免费| 特级毛片爽www免费版| 亚洲国产一级在线观看 | 99久久99热精品免费观看国产| 亚洲麻豆精品果冻传媒| 免费A级毛片无码免费视| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲AV日韩AV永久无码色欲| 国产又粗又长又硬免费视频| 九九免费久久这里有精品23| 亚洲精品无码成人AAA片| 免费黄色福利视频| 色婷婷精品免费视频| 久久久久亚洲av无码专区蜜芽| 免费影院未满十八勿进网站| 看成年女人免费午夜视频| 亚洲AV无码国产精品色午友在线| 手机看黄av免费网址| 日本精品久久久久久久久免费| 亚洲avav天堂av在线不卡| 日本免费观看网站|