最新的spring mvc,使用freemarker。
希望有人能告诉我在使用 spring mvc 验证表单方面我的选择是什么,以及推荐的方法是什么。
我有一个不直接映射到模型的表单,它具有输入字段,当发布时,将用于初始化 2 个模型对象,然后我需要对其进行验证,如果它们通过,我将保存它们。
如果失败,我想返回表单,用用户输入的内容预先填写值并显示错误消息。
我在这里和那里阅读了大约 2 种方法,其中一次我已经完成并了解它是如何工作的:
@RequestMapping(...., method = RequestMethod.POST)
public ModelAndView myMethod(@Valid MyModel, BindingResult bindingResult) {
ModelAndView mav = new ModelAndView("some/view");
mav.addObject("mymodel", myModel);
if(bindingResult.hasErrors()) {
return mav;
}
}
现在,如果我的表单直接映射到表单,这可以工作,但在我的情况下,我有:
不映射到任何特定模型的表单字段,它们具有来自 2 个模型的一些属性。
在验证发生之前,我需要手动创建 2 个模型,从表单中设置值,并手动设置一些属性:
在两个模型(model1、model2)上调用 validate,并将这些错误消息附加到错误集合中,如果事情不起作用,我需要将其传递回同一视图页面。
当表单发布时,我必须进行一些数据库调用,并且基于这些结果可能需要将其他消息添加到错误集合中。
有人可以告诉我如何进行这种验证吗?
伪代码如下:
Model1 model1 = new Model1();
Model2 model2 = new Model2();
// manually or somehow automatically set the posted form values to model1 and model2.
// set some fields manually, not from posted form
model1.setProperty10(GlobalSettings.getDefaultProperty10());
model2.setProperty11(GlobalSettings.getDefaultProperty11());
// db calls, if they fail, add to errors collection
if(bindingResult.hasErrors()) {
return mav;
}
// validation passed, save
Model1Service.save(model1);
Model2Service.save(model2);
redirect to another view
更新
我现在在我的模型上使用了 JSR 303 注释,如果我还能使用这些注释那就太好了。
更新二
请阅读下面的赏金描述,了解我正在寻找的内容的摘要。