页面仍然使用 JSP,在跳转时若是想传递参数则须要用到类 RedirectAttributes。javascript
首先看看如何打开一个普通页面:java
// 登陆页面(每一个页面都要独立的 Action 来支持其呈现) @RequestMapping(value = "/Index", method = RequestMethod.GET) public String Index(Model model) { model.addAttribute("name", "Tom"); return "UserLogin/Index"; }
很简单,直接为 Model 对象添加属性对便可,而后在 JSP 页面里,经过 ${name} 就能够获得它的值 Tom。app
那么,在页面发生了跳转的状况下该如何传递属性对参数呢?这时 RedirectAttributes 就要隆重上场了。
先上一段代码:jsp
// 登陆动做 @RequestMapping(value = "/Login", method = RequestMethod.POST) public String Login(UserLoginDTO userLoginDTO, RedirectAttributes attr) { System.out.println("--Login"); System.out.println("accountId = " + userLoginDTO.getAccountId()); System.out.println("pwd = " + userLoginDTO.getPwd()); if (userLoginDTO.getAccountId() == "") { attr.addFlashAttribute("msg", "账号不能为空"); return "redirect:/UserLogin/Index"; } if (userLoginDTO.getPwd() == "") { attr.addFlashAttribute("msg", "密码不能为空"); return "redirect:/UserLogin/Index"; } attr.addFlashAttribute("msg", "登陆一切正常"); System.out.println(attr); return "redirect:/UserLogin/LoginSuccess"; }
Login 方法的第二个参数已再也不是 Model 了,而是 RedirectAttributes,在方法体中,随着代码的各类判断,须要去往的页面也不相同,随之须要传递的消息也能够自由变化,好比:code
attr.addFlashAttribute("msg", "账号不能为空"); return "redirect:/UserLogin/Index";
在用法上与 Model 很类似,都是属性对,上述代码将跳转至 Index.jsp 页面。
众所周知,在 Spring MVC 里页面呈现以前都须要经由对应的方法来引导,接下来为了验证这里的属性对是否真的已传递出去,能够经过如下代码来验证:对象
// 登陆页面(每一个页面都要独立的 Action 来支持其呈现) @RequestMapping(value = "/Index", method = RequestMethod.GET) public String Index(Model model) { System.out.println("--Index"); System.out.println(model); return "UserLogin/Index"; }
打印出来的结果是:blog
--Index {msg=账号不能为空}
能够看到,attr.addFlashAttribute() 已将参数传递出去。在 JSP 页面里用法不变,即 ${msg} 就能够获得它的值。ip