我有一个简单的表单,其中包含一个由数据库填充的选择框。触发验证时,选择框为空。我刚开始春天,我似乎错过了一些东西。
感谢任何帮助?提前谢谢。
在下面的控制器中,网站是动态内容。
@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";
}
答案 0 :(得分:1)
不确定这是否有帮助,但是您是否尝试使用@ModelAttribute注释公开您的参考数据,以便构建您的选择框的数据?这应该与此代码段类似:
@ModelAttribute("countries")
public List getAllCountries() {
return geoService.getAllCountries();
}
或者在你的情况下:
@ModelAttribute("sites")
public List getSites() {
I18NSite[] sites = new Sites().getSites();
return Arrays.asList(sites);
}
这也是一个非常重要的问题,花了我很长时间才弄明白:
请记住,你的'支持豆',你的注册形式的表格字段中的pojo应该存在更长时间!而不仅仅是一个请求的持续时间。它,这意味着永远!应该存在相同的实例,直到调用另一个Spring mvc控制器。因此,RegistrationForm实例不仅存在于from设置和显示之后 - 当提交POST请求时,它应该仍然存在,并且Spring会使用表单数据填充RegistrationForm实例。您可以通过以下类级别注释来实现此目的:
// Example for your case...
@Controller
@SessionAttributes("registrationForm")
public class RegistrationController {
...
}
希望这会有所帮助; - )