1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package  com.boventech.learning.controller;
 
import  java.util.HashMap;
import  java.util.Map;
 
import  org.springframework.stereotype.Controller;
import  org.springframework.ui.Model;
import  org.springframework.web.bind.annotation.RequestMapping;
import  org.springframework.web.bind.annotation.RequestMethod;
import  org.springframework.web.bind.annotation.RequestParam;
import  org.springframework.web.bind.annotation.ResponseBody;
import  org.springframework.web.servlet.ModelAndView;
 
import  com.boventech.learning.entity.User;
 
/**
  * MVCReturn
  * @author peng.xia
  *
  */
@Controller
@RequestMapping ( "/MVCReturn" )
public  class  SpringMVCReturnController {
     
//对于ModelAndView构造函数可以指定返回页面的名称,也可以通过setViewName方法来设置所需要跳转的页面;
@RequestMapping (value= "/index1" ,method=RequestMethod.GET)
     public  ModelAndView index(){
         ModelAndView modelAndView =  new  ModelAndView( "/user/index" );
         modelAndView.addObject( "name" "xxx" );
         return  modelAndView;
     }
     
     //返回的是一个包含模型和视图的ModelAndView对象;
     @RequestMapping (value= "/index2" ,method=RequestMethod.GET)
     public  ModelAndView index2(){
         ModelAndView modelAndView =  new  ModelAndView();
         modelAndView.addObject( "name" "xxx" );
         modelAndView.setViewName( "/user/index" );
         return  modelAndView;
     }
     
     
     /**
      * Model一个模型对象,
      * 主要包含spring封装好的model和modelMap,以及java.util.Map,
      * 当没有视图返回的时候视图名称将由requestToViewNameTranslator决定; 
      * @return
      */
     @RequestMapping (value= "/index3" ,method=RequestMethod.GET)
     public  Map<String, String> index3(){
         Map<String, String> map =  new  HashMap<String, String>();
         map.put( "1" "1" );
         //map.put相当于request.setAttribute方法
         return  map;
     }
     //响应的view应该也是该请求的view。等同于void返回。
     
     //返回String
     //通过model进行使用
     @RequestMapping (value= "/index4" ,method = RequestMethod.GET)
     public  String index(Model model) {
         String retVal =  "user/index" ;
         User user =  new  User();
         user.setName( "XXX" );
         model.addAttribute( "user" , user);
         return  retVal;
     }
     
     //返回String
     //通过Map进行使用
     @RequestMapping (value= "/index5" ,method = RequestMethod.GET)
     public  String index(Map<String, Object> map) {
         String retVal =  "user/index" ;
         User user =  new  User();
         user.setName( "XXX" );
         model.addAttribute( "user" , user);
         return  retVal;
     }
     
     //通过配合@ResponseBody来将内容或者对象作为HTTP响应正文返回(适合做即时校验);
     @RequestMapping (value =  "/valid" , method = RequestMethod.GET)
     @ResponseBody
     public  String valid( @RequestParam (value =  "userId" , required =  false ) Integer userId,
             @RequestParam (value =  "name" ) String name) {
         return  String.valueOf( true );
     }
     //返回字符串表示一个视图名称,这个时候如果需要在渲染视图的过程中需要模型的话,就可以给处理器添加一个模型参数,然后在方法体往模型添加值就可以了,
     
      
     @RequestMapping (method=RequestMethod.GET)
     public  void  index5(){
         ModelAndView modelAndView =  new  ModelAndView();
         modelAndView.addObject( "xxx" "xxx" );
     }
     //返回的结果页面还是:/type
     //这个时候我们一般是将返回结果写在了HttpServletResponse 中了,如果没写的话,
     //spring就会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果这个时候需要模型的话,处理方法和返回字符串的情况是相同的。
 
}