一, ajax方式

(一)controller中

1. 定义AjaxResponse类 成员有: status , message, data.  其中 status是成功或失败状态, message是给出的相关信息, data是传递过来的数据

2. 定义返回AjaxResponse对象的controller: 

一个实例:

 1     @RequestMapping("createOrder")
 2     @ResponseBody
 3     public AjaxResponse createOrder(String subData, String travellerDetail) {
 4         AjaxResponse response = new AjaxResponse();
 5         response.setStatus(AjaxResponseStatus.FAILED);  //先设置状态为失败
 6         String operatorName = getOperator().getOperatorName();
 7         DisneyOrderCreateVo vo =  JSON.parseObject(subData, DisneyOrderCreateVo.class);
 8         vo.setOperator(operatorName);
 9         List<TravellerDetail> travellerDetails = new ArrayList<TravellerDetail>();
10         travellerDetails = JSON.parseArray(travellerDetail, TravellerDetail.class);
11         try {
12             orderService.createDsnOrder(vo, travellerDetails);
13         } catch (Exception e) {
14             logger.debug(e.getMessage(), e);     
15             response.setMessage(e.getMessage());  // 将失败信息返回到页面
16             return response;
17         }
18         response.setStatus(AjaxResponseStatus.SUCCESS);  // 将状态设置为成功
19         return response;
20     }

3. 在js中接收controller中返回的AjaxResponse 对象

一个实例:

 1         $.ajax({     
 2             url : basepath + "/disney/order/createOrder",
 3             method : 'POST',
 4             data : {"subData":JSON.stringify(subData) , "travellerDetail":JSON.stringify(travellerDetail)},  //将对象序列化为json对象
 5             dataType : "json", //预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断
 6             success:function(res){  // 成功后进行的操作 返回200
 7                 if(res && res.status==="SUCCESS"){
 8                     createOrderPopwin.close();
 9                     window.location.href=basepath+"/disney/order/orderList";
10                 }else if(res && res.status === "FAILED"){
11                     var errorMsg = res.message;
12                     alert(errorMsg);
13                 }
14             },
15             error:function(res){ }  //失败后进行的操作 除200外的返回状态都执行error
16         });

-------补充知识:----------

 简单的说Ajax请求通过XMLHttpRequest对象发送请求,该对象有四个状态(readyState): 
0-未初始化 
1-正在初始化 
2-发送数据 
3-正在发送数据 
4-完成 
当XMLHttpRequest.readyState为4时,表示请求已经完成可以得到响应结果。当然success和error方法还是根据响应状态码来触发。当XMLHttpRequest.status为200的时候,表示响应成功,此时触发success().其他状态码则触发error(). 
Jquery的$.ajax()函数只是封装了ajax请求,本质上还是通过JS XMLHttpRequest内置对象来处理的。 )

----------------------------------------------

 

二, 在controller中的@RequestMapping方法中通过参数Model 来传递数据

 

 

三, 在controller中的@RequestMapping方法中通过返回值Map来传递数据

 

 

四, 在controller中通过ModelAndView 来传递参数,

一个实例:

 1    @RequestMapping("/tourVisitorList")
 2    public ModelAndView tourVisitorList(@RequestParam(required = true) String tourGroupMark) {
 3       tourGroupMark = StringUtils.trimToNull(tourGroupMark);
 4       ModelAndView mav = new ModelAndView("opPage/jn/signUp/tour_visitor_list");
 5       tourGroupMark = StringUtils.trimToNull(tourGroupMark);
 6       14       Map<String, Object> idSaleMap = new HashMap<>();
15       Map<String, Object> idCusMap = new HashMap<>();
16       38       mav.addObject("idSaleMap", idSaleMap);
39       mav.addObject("idCusMap", idCusMap);
40       return mav;
41    }

其中, ModelAndView mav = new ModelAndView("opPage/jn/signUp/tour_visitor_list"); 设置返回的页面.   mav.addObject("xxx",XXX); 设置传递的数值.

此传递的数值在freemark中渲染, 不需要@responseBody.

posted on 2016-04-19 13:15  wodo2008  阅读(1291)  评论(0编辑  收藏  举报