Java 重定向视图后的Spring句柄FlashAttribute

Java 重定向视图后的Spring句柄FlashAttribute,java,spring,Java,Spring,我有一个页面check,其中我添加了一个flashAttribute(“错误”,“测试消息”)并将重定向视图返回到登录页面 @RequestMapping(value = "/login") public ModelAndView mainPage(Model model){ System.out.println(" - " + model.asMap().get("error") + " - "); //-> - null - return new ModelAndV

我有一个页面
check
,其中我添加了一个
flashAttribute(“错误”,“测试消息”)
并将
重定向视图
返回到
登录页面

@RequestMapping(value = "/login")
public ModelAndView mainPage(Model model){

    System.out.println(" - " + model.asMap().get("error") + " - "); //-> - null -

    return new ModelAndView("/login");

}

@RequestMapping(value = "/check")
public View checkLogin(RedirectAttributes redirectAttributes,
                       @RequestHeader(value = "username", required = false)String username,
                       @RequestHeader(value = "password", required = false)String password){

    redirectAttributes.addFlashAttribute("error", "Test message");
    return new RedirectView("/login");

}
此行:
model.asMap().get(“error”)
返回
null
。如何处理重定向属性?

我想可能会对您有所帮助

@RequestMapping(value = "/login")
public ModelAndView mainPage(RedirectAttributes redirectAttrs){
    Map<String> attributesMap = redirectAttrs.getFlashAttributes();

    return new ModelAndView("/login");

}

@RequestMapping(value = "/check")
public View checkLogin(RedirectAttributes redirectAttributes,
                       @RequestHeader(value = "username", required = false)String username,
                       @RequestHeader(value = "password", required = false)String password){

    redirectAttributes.addFlashAttribute("error", "Test message");
    return new RedirectView("/login");

}
@RequestMapping(value=“/login”)
公共模型和视图主页(重定向属性重定向属性){
Map attributemap=redirectAttrs.getFlashAttributes();
返回新的ModelAndView(“/login”);
}
@请求映射(value=“/check”)
公共视图检查登录(重定向属性重定向属性,
@RequestHeader(value=“username”,required=false)字符串用户名,
@RequestHeader(value=“password”,required=false)字符串密码){
redirectAttributes.addFlashAttribute(“错误”,“测试消息”);
返回新的重定向视图(“/login”);
}

希望这对你有帮助

和你的理由一样。Flash属性存储在会话中,您将会话释放到某个位置,因此没有Flash属性。修好一个,它就会修好另一个。它不起作用。但我认为问题出在会议上。戴纳姆先生怎么说。这是我在会话中遇到的问题。当然,重定向会将请求返回到http头中包含一个实体的客户端,以请求另一个resourcepath。因为在设置新请求的过程中,旧请求信息会被删除,因此如果不将其存储在model/sessionno中,则会丢失属性。我想这是我添加的链接中提到的。也许看看重定向在客户端是如何工作的。我解决了会话的问题。如果你感兴趣的话,你可以看看。但是读取
flashAttribute
的问题仍然存在。即使有了你的答案,我仍然无法从
flashAttributes
中获得价值
redirectAttrs.getFlashAttributes()
为空,即使会话相同。确定。为什么使用RedirectView作为返回参数?对我来说,你似乎是想转发到同一服务上的另一个资源。因此,您可以使用forward而不是redirect,并且可以使用ModelAndView作为返回类型。因此,也许可以尝试:返回新模型和视图(“转发:/login”)也许可以在这里查看一下,正如您在第5点中所看到的,重定向使用全新的请求,并转发相同的请求,而不做任何更改。我之所以使用重定向视图,是因为
重定向:/page
在错误的url上重定向。我的应用程序在Tomcat服务器上运行,如
mydom.com/myapp/
。但使用Apache作为反向代理,它直接在
mydom.com/
上运行。当我使用
redirect:/page
时,它会重定向到
mydom.com/myapp/page
,这是无效的链接。重定向视图重定向到
mydom.com/page
哪一个是正确的<代码>转发:/page是一种重定向,它可以更改页面,但url不会更改为
/page