SpringMVC的RedirectAttributes传递参数值的方法以及EL表达式无法获取参数值的原因

SpringMVC中使用 RedirectAttributes 从一个controller重定向传值(参数)到另一个controller的方法:

介绍:RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的。

他有两种带参的方式:

​ 第一种:
​ attr.addAttribute("param", value);
​ 这种方式就相当于重定向之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了,但这个方式因为是在url后面添加参数的方式,所以暴露了参数,有风险。

attr.addAttribute("param1", "value1");  
return "redirect:/index";

​ 这样就相当于:return "redirect:/index?param1=value1"

​ 第二种:
​ attr.addFlashAttribute("param", value);
​ 这种方式也能达到重新向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上移除对象,所以你刷新一下后这个值就会丢掉,这个方法适合用于防止刷新页面重复提交数据的问题。

具体使用方法:

controller:

@RequestMapping({"/","/index"})
    public String login() {
        return "Login";
    }
@RequestMapping("info")
    public String info(HttpSession session, RedirectAttributes attributes) {
        if (session.getAttribute("UserSession") != null)
            return "infoShow";
        attributes.addFlashAttribute("info",
                "");
        return "redirect:index";
    }

jsp页面:

${info}

​ 这种方法传递的参数是可以被EL表达式获取的。

EL表达式无法获取传值的原因:

1,请检查你的“redirect:”的冒号后面有没有空格!这个问题会导致你的EL表达式无法获取你的传值!切记!不要加空格!不要加空格!不要加空格!重要的事情说三遍!

​ 2,网络上还有种说法,说是因为接收参数值的 controller 没有加上@ModelAttribute的形参,导致无法接收,具体本人也没有出现过这问题,不是很清楚。

你可能感兴趣的:(SpringMVC的RedirectAttributes传递参数值的方法以及EL表达式无法获取参数值的原因)