問題原因:當一個界面上有多個easyui ComboBox控件,且在界面加載時同時請求數據。由於數據是異步加載,會導致下拉數據源加載失敗,或加載不正確(串數據)。
方案一:不用在一開始設定url(data加載路徑),在點擊控價下拉按鈕時再加載數據源。
<td>處理類型:</td> <td><input id="handleType" name="handleType" panelHeight="auto" class="easyui-combobox" style="width: 110px;" data-options="editable : false, onShowPanel : function(){ var s=$(this).combobox('getData'); if(s.length==0){ $(this).combobox('options').url=projectPath+'TDataDictController/loadAccountErrHandleType.do'; $(this).combobox('reload'); } }, valueField:'itemVal', textField:'colNameCn'"> </td>
方案二:在Controller的方法中,指明形參中包含HttpServletResponse參數,並在當前環境的response中返回查詢結果
@RequestMapping("loadDataDict.do") @ResponseBody public void loadAccountErrHandleType(TYwDataDictVo vo, HttpServletRequest request,HttpServletResponse response) { try { this.writeJson(tDataDictService.loadDataDict(vo,request),response); } catch (Exception e) { log.error("數據字典查詢失敗,{}", e); } }
/** * 將對象轉換為json格式並輸出 * @param obj */ public void writeJson(Object obj,HttpServletResponse response){ Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create(); response.setContentType("text/html; charset=utf-8"); PrintWriter out = null; try{ out = response.getWriter(); out.println(JSON.toJSONStringWithDateFormat(obj, "yyyy-MM-dd")); }catch(IOException e){ log.error("IO異常,{}",e); } finally{ out.flush(); out.close(); } }