Spring重定向:前缀问题

时间:2010-04-13 11:53:44

标签: spring spring-mvc resolver

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

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

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

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

有没有办法将RedirectView与我从每个控制器方法获得的String(可解析的视图名称)一起使用?

由于

1 个答案:

答案 0 :(得分:3)

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

@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)更好的方法是使用@SessionAttributes@ModelAttribute

在http会话中存储信息