Spring MVC 页面跳转时传递参数

Markdown

页面仍然使用 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} 就可以得到它的值。

posted @   溪边静禅  阅读(755)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示