如果调用验证器,java Spring 2.5表单验证动态数据是否丢失?
我有一个简单的表单,它有一个由数据库填充的选择框。触发验证时,选择框为空。我是春天的新手,似乎错过了什么
谢谢你的帮助?提前谢谢
在下面的控制器站点中是动态内容
@RequestMapping("/registration/registration.html")
public ModelMap setupRegistrationForm(HttpServletRequest request, RegistrationForm form) {
ModelMap map = new ModelMap();
I18NSite[] sites = new Sites().getSites();
map.put("sites", sites);
return map;
}
@RequestMapping(value="/registration/registration.html", method = RequestMethod.POST)
public String saveRegistrationForm(HttpServletRequest request,RegistrationForm form, BindingResult errors) {
I18NSite site = Sites.getSite();
RegistrationFormValidator validator = new RegistrationFormValidator();
validator.setDataSource(site.getDataSource());
validator.validate(form,errors);
if (errors.hasErrors()) {
return "registration/registration";
} else {
// other code
}
return "redirect:/index.html";
}
# 1 楼答案
不确定这是否有帮助,但您是否尝试过通过使用@modeldattribute注释公开您的引用数据,以便创建selectbox的数据?这应该类似于以下代码段:
或者在您的情况下:
这也是一个非常重要的问题,我花了很长时间才弄明白:
请记住,您的“支持bean”,即绑定到注册表单表单字段的pojo,应该存在更长的时间!而不仅仅是一个请求的持续时间。它,这意味着永远!在调用另一个SpringMVC控制器之前,应该存在相同的实例。因此,RegistrationForm实例不仅在设置和显示from之后立即存在,而且在提交POST请求并且RegistrationForm实例由Spring填充表单数据时,它应该仍然存在。您可以通过以下类级注释来实现这一点:
I was googling around for this one for days (REALLY!) - so I really recommend to read this blog entry I found sometime ago. It helped me out of all that Spring MVC documentation hell ;-)
希望这有帮助;-)