我正在使用Spring框架编写一个应用程序,我有一个问题,如何使用额外的字段进行表单验证。
我是新手,但据我所知,用表单填写表单:form tag我设置属性
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String register(Model model) {
model.addAttribute("tenant", new Tenant());
return "register";
}
然后创建验证器类并在POST请求中使用它:
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registerPost(@ModelAttribute("tenant") Tenant tenant,
Model model,
BindingResult result) {
TenantValidator validator = new TenantValidator();
validator.validate(tenant, result);
if (result.hasErrors()) {
return "register";
}
tenantService.save(tenant);
return "redirect:accountOverview";
}
效果非常好,我很着迷这是多么方便!
唯一的问题是如何处理额外的字段? 例如,我有“重复密码”字段。 如果我在不使用标签的情况下创建额外的字段,并直接使用和验证它们,我将无法使用:
<form:errors path="repeatPassword>
标记为'repeatPassword'不是表单对象的成员。
首先想到的解决方案是创建一个特殊的表单对象TenantDTO来保存那些额外的字段,并在保存时将数据传输到'Tenant'(实体bean)。
这是一个好方法吗?在这种情况下,最佳做法是什么?
谢谢!
Leonty
答案 0 :(得分:0)
您仍然可以在表单对象中包含这些值。我想你不想将这些保存到数据库中。您可以使用注释Transient(http://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html)来避免这种情况。这将为您提供进行路径映射的杠杆,在表单对象中进行所有验证但仍然不保存在数据库中。希望它有所帮助。