0

我有一个使用 Spring 3 的应用程序。我有一个视图解析器,它基于字符串构建我的视图。所以在我的控制器中,我有这样的方法。

@RequestMapping(...)
public String method(){
  //Some proccessing
  return "tiles:tileName"
}

由于在浏览器中更新页面,我需要返回一个RedirectView来解决重复提交,所以我想到了使用Spring重定向:前缀。问题是它仅在我使用 URL 更改前缀时才会重定向(不是解析器可以理解的名称)。我想做这样的事情:

@RequestMapping(...)
public String method(){
  //Some proccessing
  return "redirect:tiles:tileName"
}

有什么方法可以将 RedirectView 与我从每个控制器方法获得的字符串(可解析的视图名称)一起使用?

谢谢

4

1 回答 1

3

以redirect:为前缀的调用是一个url,在标准浏览器302重定向中发送。您不能重定向到视图,因为视图不是 url。相反,您需要一个新的Servlet映射到“成功”视图,然后重定向到该视图

@RequestMapping("processing.htm")
public String method(){
  //Some proccessing
  return "redirect:success.htm"
}

@RequestMapping("success.htm")
public String method(){
  return "tiles:tileName"
}

当您只需要显示“谢谢”页面时,这种情况就可以正常工作,这不需要处理阶段的特定数据。但是,如果您的成功页面需要显示处理中的一些信息,有两种方法可以做到。

1) 将 url 中的信息作为 get post ("redirect:success.htm?message=hi") 传递。这是非常容易破解的,因此非常不推荐。

2)更好的方法是在http会话中存储信息,使用@SessionAttributes@ModelAttribute

于 2010-04-13T22:50:39.783 回答