封装——是衡量是否简洁的重要标准
最近做一个白名单,给用户依据商户号添加使用。但是在添加之前要去判断是不是已经存在,如果存在的话,就要给前台返回信息,如果不存在就要有提示。
jsp整体使用from提交,关于是否存在的提示则使用ajax异步提交。
首先,给相关的字段添加一个onblur事件:
1 <td nowrap="nowrap">2 ????????<span><input id="enterCode" name="enterCode" class="form-control" type="text" onblur="chechEnterCode()"/></span>3 ????????<font id="enterCodeMsg"></font>4 </td>
对应的js代码如下:
function chechEnterCode(){ ???var enterCode = $("#enterCode").val(); ???$.ajax({ ???????url : "paymentsetting.do?method=checkEnterCode", ???????dataType : "json", ???????type : "post", ???????data : {"enterCode" : enterCode}, ???????success : function(json){ ???????????if("false" == json.ret){ ???????????????$("#enterCodeMsg").html("该商户不存在!"); ???????????????$("#enterName").val(""); ???????????????$("#orgNo").val(""); ???????????????$("#orgNm").val(""); ???????????} ???????????else if("true" == json.ret){ ???????????????$("#enterCodeMsg").html(""); ???????????????$("#enterName").val(json.ENTER_NAME); ???????????????$("#orgNo").val(json.ORG_NO); ???????????????$("#orgNm").val(json.ORG_NM); ???????????} ???????} ???})}
在controller层代码如下:
1 /** 2 ?????* ?3 ????* 【根据商户号反馈商户名、所属机构信息】 4 ????* @param request 5 ????* @param response 6 ????* @param enterCode 7 ?????*/ 8 ????@RequestMapping(params = "method=checkEnterCode") 9 ????public void checkEnterCode(HttpServletRequest request,HttpServletResponse response, String enterCode){10 ????????try {11 ????????????Map map = (Map) paymentSettingServer.findEnterByEnterCode(enterCode);12 ????????????if(null == map){13 ????????????????map = new HashMap<>();14 ????????????????map.put("ret", false);15 ????????????}16 ????????????else{17 ????????????????map.put("ret", true);18 ????????????}19 ????????????String json = JsonUtil.map2json(map);20 ????????????responseMessage(response,json);---------------------------》转注21 ????????} catch (Exception e) {22 ????????????e.printStackTrace();23 ????????}24 ????}
注:此处将所有的往前端写值的方法封装在一个类中:
1 protected void responseMessage(HttpServletResponse response, String message)2 ????????????throws IOException {3 ????????LogUtil.MSG.debug(message);4 ????????response.setContentType("text/html;charset=UTF-8");5 ????????PrintWriter out = response.getWriter();6 ????????out.write(message);7 ????}
controller层调用接口(server)如下:
1 /**2 ?????* 3 ????* 【根据商户号获取商户信息】4 ????* @param enterCode5 ????* @return6 ?????*/7 ????public Object findEnterByEnterCode(String enterCode);
接口的实现如下:
1 @Override 2 ????public Object findEnterByEnterCode(String enterCode) { 3 ????????try { 4 ????????????return paymentsettingServiceImpl.findEnterByEnterCode(enterCode); 5 ????????} catch(BizException ex) { 6 ????????????LogUtil.MSG.error(ex.getMessage()); 7 ????????????throw ex; 8 ????????} catch(Exception ex) { 9 ????????????LogUtil.ERROR.error(ex,ex);10 ????????????throw new BizException(ex.getMessage());11 ????????}12 ????}
服务层的代码如下:
1 public Object findEnterByEnterCode(String enterCode) {2 ????????try {3 ????????????return paymentsettingDaoImpl.findEnterByEnterCode(enterCode);4 ????????} catch (Exception e) {5 ????????????LogUtil.ERROR.error("校验商户号发生异常:" + e.getMessage());6 ????????????throw new BizException("校验商户号发生异常", e);7 ????????}8 ????????9 ????}
dao层代码如下(此处使用的是hibernate框架):
1 public Object findEnterByEnterCode(String enterCode) { 2 ????????QueryHelper helper = new QueryHelper(); 3 ????????helper.append("select ep.ENTER_CODE,ep.ENTER_NAME,cm.ORG_NO,cm.ORG_NM "); 4 ????????helper.append(" from T_ENTERPRISE ep " 5 ????????????????+ " left join CMMTINORG cm ?on ep.ORGANIZATION = cm.ORG_NO "); 6 ????????helper.append(" where ep.ENTER_CODE = ?",enterCode); 7 ????????List list = super.getListBySql(helper, Transformers.ALIAS_TO_ENTITY_MAP); 8 ????????if(list.size() == 1){ 9 ????????????return list.get(0);10 ????????}11 ????????else{12 ????????????return null;13 ????????}14 ????}
不存在的情形(直接去数据库查询然后给出提示):
存在的情形(查询出对应的数据并且填充):
后端ajax异步请求的使用
原文地址:https://www.cnblogs.com/1987721594zy/p/9872345.html