我正在寻找一种方法来重定向或从一个Controller请求映射转发到另一个。
情况是我有一个控制器,它有三个阶段:用户输入数据 - >预览页面 - >提交。在预览请求映射中,我有Model Attribute及其BindingResult。如果我在绑定中有错误,我想使用重定向将用户推回到New表单,但是当我这样做时,Spring会重新评估ModelAttribute,从而重新创建BindingResult。
一些代码:
@RequestMapping(value = "\new", method = RequestMethod.GET)
@ApplicationUserCreated
public String formNew(
@ModelAttribute("formBean") FormBean formBean,
BindingResult bindingResults,
Model uiModel) {
// Do some stuff
// Send the "new form" view
return "new.jsp";
}
@RequestMapping("/preview", method = RequestMethod.POST)
@ApplicationUserCreated
public String formPreview(
@ModelAttribute("formBean") FormBean formBean,
BindingResult bindingResults,
Model uiModel) {
// TODO: Validate the form
if(bindingResults.hasErrors()) {
// Redirect them back to the "New" form
return "redirect:" + "/new";
} else {
return "preview.jsp";
}
}
请原谅任何拼写错误,因为我必须尝试简化代码。我尝试从formNew()方法中删除BindingResults,但是当Preview重定向到New时,它似乎仍然会覆盖BindingResults。我也尝试过做“前进”,但结果相同。
答案 0 :(得分:1)
当我需要将用户发送回new.jsp时,我最终只是从 formPreview()调用 formNew()。我没有得到重定向,所以浏览器中的URL显示为“/ preview”,但至少它正在工作,我觉得我不是在浪费时间重复代码。
答案 1 :(得分:0)
您可以在会话中存储BindingResult,或者如果您至少有春季3.1,则可以尝试使用Spring Flash Attributes发送该数据。
**如果ManagementMovesFormBean扩展或实现了你的FormBean,你应该在flash属性中发送该bean。
**顺便说一下,为了验证你的形式,你应该在@ModelAttribute(“.....
”之前添加@Valid不要忘记将BindingResult分配给单个类,在您的示例中,您有2个具有不同预期对象的方法,因此这两个BindingObjects是不同的
答案 2 :(得分:0)
我不确定预览页面的用途是什么,但我建议在同一页面上执行验证,并且只有在输入有效时才能使用重定向进行预览。