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

标签 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. 
}

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

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

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

最佳答案

标准模式是有一个 Controller 方法来处理 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";
}

返回带有“重定向:”前缀的 View 名称会强制 Spring 直接发送 HTTP 而不是转发内部请求。

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

关于java - Spring MVC(Spring 2.5)关于Post-Redirect-Get的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266227/

相关文章:

java - 通过Interceptor或HttpEntity向RestTemplate添加http header ?

java - Spring MVC 3 获取初始化参数

java - 执行 mvn eclipse :eclipse 后我的源文件夹被删除

java - 如何在 Spring Flux 中并行化数据库查询?

java - 使用 @RequestBody 进行 GET 的 REST API

java - thymeleaf :if expression not evaluating true

json - 如何在 Spring MVC 中将字符串转换为对象

java - Hibernate:外键的列数错误。应该是 1

java - 尝试失败后暂时禁用登录

java - 在 Android 中将 Parceables 数组写入 Parcel