ModelAttribute注解使用与spring重定向传参

@ModelAttribute可以用于修饰controller里的方法和参数,将被修饰的对象的值绑定到指定名称的属性里。

  • 当修饰方法时,方法返回的值会在该controller里每个访问处理前绑定一次。
  • 修饰参数时,如果想重定向或者转发到另一个方法后,还能在另一个方法中取得model里的参数值,可以使用两种方法(假设方法A里跳到方法B,要取得方法A里的参数):
  1. 将方法A里的参数放在RedirectAttributes里,使用重定向进到B方法,在方法B里获取参数。
  2. 使用forward转发到B,使用HttpServletRequest.getAttribute()方法获取参数。

测试代码:

@Controller
@RequestMapping("/")
public class ModelTest {
    @Value("wj")
    private String userName;

    @ModelAttribute("sayHello")
    public String runBeforeEachHandlerCalled() {
        System.out.println("runBeforeEachHandlerCalled方法执行");
        String sayHello = "Hello " + userName;
        return sayHello;
    }

    @RequestMapping(value = "/home",method = RequestMethod.GET)
    public String toHomePage() {
       return "index";
    }

    @RequestMapping(value = "/handler1")
    public String redirectMethod(@ModelAttribute("key2")String key2, RedirectAttributes attrbs) {
        System.out.println("handler1里");

        key2 = "key2value";

        attrbs.addAttribute("redirectAttr1","redirectAttr1value");
        attrbs.addFlashAttribute("redirectAttr2","redirectAttr2value");

//       return "forward:/handler2";
//       return new RedirectView("handler2");
        return "redirect:handler2";
    }

    @RequestMapping(value = "/handler2")
    public String redirectDestination(ModelMap map, String redirectAttr1,
                                      @ModelAttribute("redirectAttr2")String redirectAttr2,
                                      HttpServletRequest request, RedirectAttributes attrbs) {
        System.out.println("handler2里");
        System.out.println("ModelMap.key2值为:" + map.get("key2"));
        System.out.println("redirect.request.key2:" + request.getAttribute("key2"));
        System.out.println("redirect.request.redirectAttr1:" + request.getAttribute("redirectAttr1"));
        System.out.println("redirectAttr1值为:" + redirectAttr1);
        System.out.println("redirectAttr2值为:" + redirectAttr2);
        map.put("key3","key3value");
        attrbs.addAttribute("key4","key4value");
        return "forward:handler3";
    }

    @RequestMapping(value = "/handler3")
    public String forwardDestination(ModelMap map,@ModelAttribute("redirectAttr1") String redirectAttr1,
                                     @ModelAttribute("redirectAttr2")String redirectAttr2,@ModelAttribute("key4")String key4,
                                      HttpServletRequest request) {
        System.out.println("handler3里");
        System.out.println("ModelMap.key3值为:" + map.get("key3"));
        System.out.println("forward.request.key3:" + request.getAttribute("key3"));
        System.out.println("forward.request.redirectAttr1:" + request.getAttribute("redirectAttr1"));
        System.out.println("redirectAttr1值为:" + redirectAttr1);
        System.out.println("redirectAttr2值为:" + redirectAttr2);
        System.out.println("key4值为:" + key4);
        return "index";
    }

}

index.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
         pageEncoding="utf-8"%>
<html>
<body>
<h2>${sayHello}</h2>
</body>
</html>

输出结果:

runBeforeEachHandlerCalled方法执行
handler1里
runBeforeEachHandlerCalled方法执行
handler2里
ModelMap.key2值为:null
redirect.request.key2:null
redirect.request.redirectAttr1:null
redirectAttr1值为:redirectAttr1value
redirectAttr2值为:redirectAttr2value
runBeforeEachHandlerCalled方法执行
handler3里
ModelMap.key3值为:null
forward.request.key3:key3value
forward.request.redirectAttr1:null
redirectAttr1值为:redirectAttr1value
redirectAttr2值为:redirectAttr2value
key4值为:

转载于:https://my.oschina.net/u/1171648/blog/1606833

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值