界面存在多个easyUI Combobox控件时,加载数据失败,或加载不正确
问题原因:当一个界面上有多个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(); } }