<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還是有些不方便的地方,不過小項目練練手還是不錯的,呵呵。  回復  更多評論
      
    主站蜘蛛池模板: 91短视频在线免费观看| 久久精品国产亚洲一区二区三区 | 最新猫咪www免费人成| 全黄性性激高免费视频| 丁香五月亚洲综合深深爱| 亚洲日本在线观看| 国产天堂亚洲国产碰碰| 国产偷伦视频免费观看| 97人伦色伦成人免费视频| 国产亚洲精品成人a v小说| 亚洲日韩在线视频| 一级做性色a爰片久久毛片免费| xxxxwww免费| 亚洲欧洲∨国产一区二区三区| 亚洲国产日韩女人aaaaaa毛片在线 | 57pao一国产成永久免费| 性感美女视频免费网站午夜| 国产成人免费午夜在线观看| 亚洲热线99精品视频| 亚洲乱码日产精品一二三| 亚洲另类自拍丝袜第五页| 婷婷亚洲综合五月天小说在线| 精品视频免费在线| 国产一卡二卡四卡免费| 国产成人青青热久免费精品| 精品少妇人妻AV免费久久洗澡| 国产自偷亚洲精品页65页| 亚洲综合一区二区| 又粗又长又爽又长黄免费视频| 亚洲欧洲自拍拍偷精品 美利坚| 国内精品免费麻豆网站91麻豆| 国产真人无码作爱免费视频| 老司机亚洲精品影院在线观看| 亚洲av专区无码观看精品天堂| 亚洲av无码精品网站| 亚洲一区视频在线播放| 成年大片免费视频| 亚洲1区1区3区4区产品乱码芒果| 久久免费国产精品一区二区| 亚洲视频在线一区二区| 亚洲一区免费视频|