Spring MVC(Spring 2.5)关于Post-Redirect-Get的问题

时间:2010-07-16 15:07:28

标签: java spring spring-mvc

我有一个Spring Annonted Controller,用于从表单中捕获信息并从数据库中获取搜索结果列表。

以下是方法的定义

@RequestMapping(method = RequestMethod.POST, params = {SUBMIT_BTN }) 
public ModelAndView processForm(@ModelAttribute(COMMAND_NAME){


   // 1. Load search results using search parameters from form (Contained in a collection of some sort)


   // 2. Create the ModelAndView 

   // 3. Redirect with RequestView or redirect: to generate a GET. 
}

我认为我需要使用重定向重定向:因为我在会话中的集合存储中有一个项目列表。无法将其添加为url请求参数。

基本上我正在尝试防止问题,即后退按钮,表示页面已过期。我想在字符串中实现PRG模式。

我很难将POST转换成GET。我可以重定向还是需要两种方法?感谢您的任何帮助,您可以提供。

1 个答案:

答案 0 :(得分:6)

标准模式是有一个控制器方法来处理GET,它显示用户的表单(或其他),以及一个处理POST的表单提交。 POST方法在完成处理提交后发送重定向,然后返回到GET方法。

@RequestMapping(value="/myapp", method=GET) 
public String showForm(@ModelAttribute(COMMAND_NAME){
   return "form.jsp";
}

@RequestMapping(value="/myapp", method=POST) 
public String processForm(@ModelAttribute(COMMAND_NAME){
   // do stuff to process for submission
   return "redirect:/myapp";
}

使用“redirect:”前缀返回视图名称会强制Spring发送HTTP直接而不是内部请求。

这与Spring 2.0使用SimpleFormController实现的模式相同,但新方法更加透明。