Spring MVC 页面跳转时传递参数

时间:2024-04-06 09:07:53

Spring MVC 页面跳转时传递参数

页面仍然使用 JSP,在跳转时如果想传递参数则需要用到类 RedirectAttributes。

首先看看如何打开一个普通页面:

// 登录页面(每个页面都要独立的 Action 来支持其呈现)
@RequestMapping(value = "/Index", method = RequestMethod.GET)
public String Index(Model model)
{
model.addAttribute("name", "Tom");
return "UserLogin/Index";
}

很简单,直接为 Model 对象添加属性对即可,然后在 JSP 页面里,通过 ${name} 就可以得到它的值 Tom。

那么,在页面发生了跳转的情况下该如何传递属性对参数呢?这时 RedirectAttributes 就要隆重上场了。

先上一段代码:

// 登录动作
@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,在方法体中,随着代码的各种判断,需要去往的页面也不相同,随之需要传递的消息也可以*变化,比如:

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";
}

打印出来的结果是:

--Index
{msg=帐号不能为空}

可以看到,attr.addFlashAttribute() 已将参数传递出去。在 JSP 页面里用法不变,即 ${msg} 就可以得到它的值。