<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 閱讀(1516) 評論(2)  編輯  收藏 所屬分類: JavaJSF

    評論:
    # re: [JSF]手動初始化選擇控件 頁面所有action均失效的問題 2009-11-19 01:12 | huliqing
    感覺很久沒有看到關于JSF的文章了呢,呵呵!  回復  更多評論
      
    # re: [JSF]手動初始化選擇控件 頁面所有action均失效的問題 2009-11-19 08:39 | TiGERTiAN
    @huliqing
    可能用的不多吧,開發了幾個項目,感覺jsf還是有些不方便的地方,不過小項目練練手還是不錯的,呵呵。  回復  更多評論
      
    主站蜘蛛池模板: 一区二区免费视频| 免费真实播放国产乱子伦| 国产精品免费播放| 中文字幕 亚洲 有码 在线| 亚洲AV无码国产精品色| 日韩精品无码一区二区三区免费| 亚洲无码黄色网址| 日韩精品无码永久免费网站| 成人免费毛片内射美女-百度| 亚洲AV无码一区二区乱子伦| 中文在线免费观看| 亚洲色欲久久久综合网| 一级毛片免费不卡| 亚洲自偷自偷图片| 日本高清不卡aⅴ免费网站| 国产亚洲欧洲Aⅴ综合一区 | 亚洲av无码专区国产不乱码| 午夜a级成人免费毛片| 国产成人精品日本亚洲专区6| 超清首页国产亚洲丝袜| 91情侣在线精品国产免费| 成人免费区一区二区三区| 精品亚洲av无码一区二区柚蜜| 国产精品色午夜免费视频| 999任你躁在线精品免费不卡| 特级毛片aaaa免费观看| 久久久久亚洲?V成人无码| 成年男女免费视频网站| 亚洲欧美日韩综合久久久久| 国产高清在线免费| 日本人的色道免费网站| 中文字幕在线日亚洲9| 亚洲一级Av无码毛片久久精品 | 国产精品色午夜免费视频| 久久精品无码专区免费青青| 亚洲剧场午夜在线观看| 最新仑乱免费视频| 一级毛片免费不卡在线| 三年片在线观看免费| 亚洲精品视频免费观看| 亚洲免费二区三区|