我有一个显示产品信息的详细信息页面,在此页面底部是一个发表评论的表单。
详细信息页面有一个请求映射/视图:
@RequestMapping(value = "/view", method = RequestMethod.GET)
public String view(@ModelAttribute("cf") CommentForm cf, Model model) {
这是我将数据放入我的视图中可以使用的模型(model.addAttribute)中的地方。
这里没问题。
当用户使用表单提交新评论并忘记输入评论时,就会出现问题。
@RequestMapping(value = "/comment", method = RequestMethod.POST)
public String comment(@ModelAttribute("cf") @Valid CommentForm cf, BindingResult result, Model model,
RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
return "apps.view";
}
如您所见,如果有错误,则会返回视图模板。但这是错误的,因为模型中没有放入任何数据。
在表单验证失败时,获取模型中数据的最佳方法是什么?
我的第一个猜测是创建一个函数putDataInModel()并从view()调用它,并在表单验证失败时(在返回" view"之前)。
虽然我打开并希望有更好的解决方案。
答案 0 :(得分:0)
一种选择是将CommentForm保留在会话中
@Controller
@RequestMapping("/product")
@SessionAttributes("cf")
public class ProductController {
另一个选择是使用@ModelAttribute在每个请求上填充模型
public class ProductController {
@ModelAttribute("product")
public Product populateProduct() {
return /*data from service or DAO */
}
...
}