四. 返回Map 形式
Map 与Model 一样,也是可以收集数据,但不知道如何控制视图名,所以用URL 来进行相应的控制。
@RequestMapping(value="/login") public Map<String,String> toLogin(){ Map<String,String>map=new HashMap<String,String>(); map.put("name","两个蝴蝶飞的Map形式"); return map; }
五. 返回ModelMap 形式
ModelMap, 是一个Map,但又具有Model 类的某些特性。 是Model和Map的结合体。
当然,ModelMap 也是通过 url来控制跳转的视图名的。
@RequestMapping(value="/login") public ModelMap toLogin(ModelMap modelMap){ //可以用model的形式 modelMap.addAttribute("name","两个蝴蝶飞ModelMap的model形式"); //也可以用map的形式赋值 //modelMap.put("name","两个蝴蝶飞ModelMap的map形式"); return modelMap; }
用model的形式填充的话,
用map的形式填充的话,将下面的那行代码去除注释,上面的添加注释
六. 返回View 形式
返回的是 PDF,Excel 格式的内容。 暂不讲解。
##七. 返回String 类型 (最常用之一)
返回一个字符串。 其中这个字符串,可以单纯的指将要返回的视图名称,也可以是转发和重定向。 当然,设置的数据模型的形式也是多种多样。
常见的用 Model,ModelMap 和request 域,但是,不能用ModelAndView填充,会出错。
七.一 表示单纯的将要返回的视图名称
1 .request域或者是session 域 填充值。
@RequestMapping(value="/toLogin") public String toLogin(HttpServletRequest request){ request.setAttribute("name","两个蝴蝶飞返回String的request设置值"); return "user/login"; }
2 . Model 填充值
@RequestMapping(value="/toLogin") public String toLogin(Model model){ model.addAttribute("name","两个蝴蝶飞返回String的model设置值"); return "user/login"; }
3 .ModelMap 填充值
@RequestMapping(value="/toLogin") public String toLogin(ModelMap map){ map.put("name","两个蝴蝶飞返回String的modelMap设置值"); //也可以用addAttribute return "user/login"; }
4 .ModelAndView 填充值,会展示不出数据。
@RequestMapping(value="/toLogin") public String toLogin(){ ModelAndView model=new ModelAndView(); model.addObject("name","两个蝴蝶飞返回String的modelAndView设置值"); return "user/login"; }
前台展示,并不会展示出数据。
常常喜欢用Model 来进行填充值。
七.二 表示转发 (request域可以接收到) 用forward
@RequestMapping(value="/toLogin") public String toLogin(HttpServletRequest request){ request.setAttribute("name","两个蝴蝶飞返回String的转发设置值"); return "forward:forwardLogin.action"; //forward 这个表示的是转发,注意路径。后面要加上.action } @RequestMapping(value="/forwardLogin") public String forwardLogin(HttpServletRequest request,Model model){ System.out.println("获取值:"+request.getAttribute("name").toString()); model.addAttribute("name",request.getAttribute("name").toString()); return "user/login"; //这个就是单纯的返回视图名称。 }
控制台打印输出:
前台展示输出:
注意观察地址栏,没有发现改变。 而且接收到了request域的内容。
转发时的路径, 如果是同一个Action 中的不同的方法,可以直接写路径,不用带/user 。
七.三 表示重定向 (request域接收不到) 用 redirect
@RequestMapping(value="/toLogin") public String toLogin(HttpServletRequest request){ request.setAttribute("name","两个蝴蝶飞返回String的重定向设置值"); return "redirect:forwardLogin.action"; //redirect 这个表示的是重定向,注意路径。后面要加上.action } @RequestMapping(value="/forwardLogin") public String forwardLogin(HttpServletRequest request,Model model){ if(null==request.getAttribute("name")){ model.addAttribute("name","两个蝴蝶飞返回String的重定向未获取request域值"); }else{ model.addAttribute("name",request.getAttribute("name").toString()); } return "user/login"; //这个就是单纯的返回视图名称。 }
前台展示输出
重定向时,地址栏发生了改变,不能接收到request域的内容。
##八. 返回 void 类型 (最常用之一)
返回void 类型时,可以用Model 来设置值,那如何来设置视图名称呢?