2012-03-04 73 views
0

我正在用Spring框架编写应用程序,并且我有一个问题如何使用额外字段进行窗体验证。带额外字段的弹簧窗体验证

我是新来的这一点,但据我了解与表格填写表格:表单标签我设置属性与

@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

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

+0

这是我没有想到的。 我的担心是,我的实体类将具有表单功能(通过具有这些额外的字段)。这是在EJB中,所以使用这个bean的另一个应用程序将会收到一个对象,这个对象的字段根本就没有用(对于那个特定的应用程序)。希望我说的话有道理。总之 - 我想尽可能地分散关注点。 – Leonti 2012-03-04 21:38:15