【发布时间】:2015-08-15 01:37:51
【问题描述】:
我有一个关于 Spring 表单的问题(具体来说是 Thymeleaf)。
我知道我一次只能使用一个 bean 来支持 Spring 中的表单,所以我认为让 Controller 选择应该绑定到表单的 bean 会很好,具体取决于发送的参数。但是,我没有为每个新参数编写一个新的 RequestMapping,而是想知道是否可以以某种方式仅将参数映射到 ModelAttribute 本身。
我想到了这样的事情:
@Controller
public class FormController{
@ModelAttribute("bean", params={"type=bean1"}) //this declaration is invalid
public IBean loadEmptyModelBean(){
return new Bean1();
}
@ModelAttribute("bean", params={"type=bean2"})
public IBean loadEmptyModelBean(){
return new Bean2();
}
//..
@RequestMapping(method=RequestMethod.GET)
public String showForm(IBean bean){
//..
}
@RequestMapping(method=RequestMethod.POST, params={"validate"})
public String validate(@Valid IBean bean, BindingResult result){
List<ObjectError> errors = bean.validate();
for(ObjectError e: errors){
result.addError(e);
}
//redirecting, etc
}
}
如您所见,我将根据参数实例化不同的 Bean,并且仍然对每个 GET 和 POST 过程仅使用一种方法,因为 IBean 将是一个强制所有 Bean 实现 validate() 方法的接口。
我几天前才开始使用 Spring,想知道是否有人知道解决此问题的方法,谁比我更有经验 :)
我搜索了答案,但找不到针对我的具体问题的解决方案。我想,我可以实现很多由参数过滤的处理程序,但这将是非常多余的,因为每个方法都必须执行相同的操作(调用 validate() 方法并将新错误添加到 BindingResult)。 ..我认为这不是一个好的解决方案,tbh。
希望我的问题听起来不傻^^
提前感谢您的时间和精力。
【问题讨论】:
标签: java forms validation spring-mvc modelattribute