2012-03-04 9 views
0

私はSpringフレームワークでアプリケーションを書いています。余分なフィールドでフォーム検証を行う方法について質問があります。余分なフィールドでの春のフォーム検証

私は私の知る限りのフォームでフォームを埋めるために理解し、これに新たなんだけど:私は

@RequestMapping(value = "/register", method = RequestMethod.GET) 
public String register(Model model) { 

    model.addAttribute("tenant", new Tenant());      
    return "register"; 
} 

で属性を設定formタグはその後、バリデータクラスを作成し、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

関連する問題