Struts2+veloctiy+ajax实践
一、velocity JS代码:
var floorId = document.getElementById("indexFloor.floorId").value; var floorSortNo = document.getElementById("indexFloor.floorSortNo").value; var floorIntro = document.getElementById("indexFloor.floorIntro").value; var startDate = document.getElementById("indexFloor.startDate").value; var endDate = document.getElementById("indexFloor.endDate").value; var startTime = document.getElementById("indexFloor.startTime").value; var endTime = document.getElementById("indexFloor.endTime").value; //校验该时段是否已经定义楼层 jQuery.ajax({ type:"post", url:"/admin/floorcheck/timeCheck/timeCheckForNewIndexFloor.action?floorSortNo=" + floorSortNo + "&floorId=" + floorId + "&startDate=" + startDate + "&endDate=" + endDate + "&startTime=" + startTime + "&endTime=" + endTime, dataType:"text", success:function (data) { var dataObj=eval("("+data+")");//结果转化为json if (dataObj.code=="true") {//根据结果的code来做分支 if(flag == false) { flag = true; $("#data_form").submit(); }else{ alert("已经提交过了,请勿重复提交"); } } else { alert(dataObj.msg); //提示服务端返回的msg信息 } } }); |
返回值转化为json,对应的key由服务端的action所决定,我们这里action定义的是一个map,map包含了两个key,一个是code,一个是msg。通过code进行判断,通过msg对客户进行返回
二、Action代码
private Map<String, String> map = new HashMap<String, String>(); //在action里定义一个map,用于返回给客户端 public String timeCheckForNewIndexFloor() { //初始化request参数 String floorSortNo = request.getParameter("floorSortNo"); String floorId = request.getParameter("floorId"); String startDate = request.getParameter("startDate"); String endDate = request.getParameter("endDate"); String startTime = request.getParameter("startTime"); String endTime = request.getParameter("endTime"); IndexFloor indexFloor = new IndexFloor(); indexFloor.setFloorSortNo(Integer.parseInt(floorSortNo)); if (!StringUtils.isEmpty(floorId)) { //新增没有id indexFloor.setFloorId(Integer.parseInt(floorId)); } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { indexFloor.setStartDate(dateFormat.parse(startDate)); indexFloor.setEndDate(dateFormat.parse(endDate)); } catch (ParseException e) { log.error("timeCheckForNewIndexFloor解析日期报错", e); } indexFloor.setStartTime(Short.valueOf(startTime)); indexFloor.setEndTime(Short.valueOf(endTime)); map = floorCheckService.timeCheckIndexFloor(indexFloor);//map包含了返回给客户端的主要信息,包括code和msg return "timeCheckForNewIndexFloor";//这里返回方法名 } |
Service方法:
public Map<String, String> timeCheckIndexFloor(IndexFloor indexFloor) { Map<String, String> map = new HashMap<String, String>(); map.put("code", "true");//初始化 map.put("msg", ""); If(XXX) { //具体的业务逻辑部分 map.put("code", "false"); map.put("msg", "该时间区间与已存在的楼层区间冲突!楼层序号:" + indexFloor1.getFloorSortNo() + ",开始时间:" + oldStartTime + "结束时间:" + oldEndTime); break; } return map; } |
通过以上两步,我们服务端处理了具体的业务逻辑,封装好了返回的信息,交给struts去处理了
三、Struts配置
<package name="cms-floorcheck-timeCheck" namespace="/admin/floorcheck/timeCheck" extends="json-default"> //注意这里要继承json-default <action name="*" class="com.jd.m.cms.web.action.floor.FloorCheckAction" method="{1}"> <result name="{1}" type="json"> //由于action中返回市是法名,这里也用通配符代替了 <param name="root">map</param> //这里是关键,把action返回的map映射为json </result> </action> </package> |