带有额外字段的Spring表单验证

时间:2012-03-04 18:12:14

标签: spring-mvc validation

我正在使用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

1 个答案:

答案 0 :(得分:0)

您仍然可以在表单对象中包含这些值。我想你不想将这些保存到数据库中。您可以使用注释Transient(http://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html)来避免这种情况。这将为您提供进行路径映射的杠杆,在表单对象中进行所有验证但仍然不保存在数据库中。希望它有所帮助。