我正在使用Spring 3.1.我有一个控制器函数,它接受通过FORM提交的命令对象(数据持有者)并进行一些处理:
@RequestMapping(value = "/results", method = RequestMethod.POST)
public String toResultsScreen(@ModelAttribute("ssdh") SearchScreenDataHolder ssdh,
BindingResult bindingResult,
ModelMap model,
HttpSession session) {
if (bindingResult.hasErrors()) {
logger.debug("Error returning to /search screen");
return "search";
}
netView = "results";
// do stuff
return nextView;
} // end function
Run Code Online (Sandbox Code Playgroud)
有些用户希望以编程方式创建GET链接以从我们的站点获取信息,并且我想设置另一个处理该请求的处理程序.它将创建命令对象(ssdh)的新安装,并使用通过GET请求发送的参数填充它.然后它会将它传递给上面的处理程序.像这样的东西:
@RequestMapping(value = "/pubresult")
public String toPublicResultsScreen(ModelMap model,
HttpSession session,
@RequestParam (required=true) String LNAME,
@RequestParam (required=false)String FNAME){
Search search = new Search(usertype);
// Capture the search parameters sent by HTTP
ssdh.setLast_name(LNAME);
ssdh.setFirst_name(FNAME);
// To Do: "forward this data holder, ssdh to the controller function quoted first
return nextView;
} // end function
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将命令/数据持有者对象转发到第一个控制器函数,这样我就不必以任何方式将代码更改为第一个控制器函数?
dan*_*nik 17
您可以使用RedirectAttributesSpring MVC 3.1中引入的对象,并使用要保留的数据进行填充以进行重定向.它称为PRG(POST/Redirect/GET)模式.
@RequestMapping(value="/saveUserDetails.action", method=RequestMethod.POST)
public String greetingsAction(@Validated User user,RedirectAttributes redirectAttributes){
//setting attributes
redirectAttributes.addFlashAttribute("firstName", user.getFirstName());
redirectAttributes.addFlashAttribute("lastName", user.getLastName())
return "redirect:success.html";
}
Run Code Online (Sandbox Code Playgroud)
我写了一些关于如何使用它的技术文章.我相信它会给你更多细节:
http://www.tikalk.com/java/redirectattributes-new-feature-spring-mvc-31
您应该能够在ModelAttribute中设置ssdh并简单地将其转发回来,这样,RequestDispatcher应该能够将它映射回/results处理程序:
@RequestMapping(value = "/pubresult")
public String toPublicResultsScreen(ModelMap model,
HttpSession session,
@RequestParam (required=true) String LNAME,
@RequestParam (required=false)String FNAME, Model model){
Search search = new Search(usertype);
// Capture the search parameters sent by HTTP
ssdh.setLast_name(LNAME);
ssdh.setFirst_name(FNAME);
model.addAttribute("ssdh", ssdh);
return "forward:/results";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50975 次 |
| 最近记录: |