2009-03-27 2 views
13

私はフォームの入力と検証にSpringを使用しています。フォームコントローラのコマンドには、編集中のモデルが含まれています。モデルの属性の中にはカスタムタイプがあります。たとえば、個人の社会保障番号はカスタムSSNタイプです。Springの検証、PropertyEditorが特定のエラーメッセージを生成する方法

public class Person { 
    public String getName() {...} 
    public void setName(String name) {...} 
    public SSN getSocialSecurtyNumber() {...} 
    public void setSocialSecurtyNumber(SSN ssn) {...} 
} 

と春のフォーム編集コマンドで人を包む:

public class EditPersonCommand { 
    public Person getPerson() {...} 
    public void setPerson(Person person) {...} 
} 

春がSSNにテキストを変換する方法を知らないので、私は、フォームコントローラのバインダーと顧客のエディタを登録します。

public class EditPersonController extends SimpleFormController { 
    protected void initBinder(HttpServletRequest req, ServletRequestDataBinder binder) { 
     super.initBinder(req, binder); 
     binder.registerCustomEditor(SSN.class, "person.ssn", new SsnEditor()); 
    } 
} 

とSsnEditorはSSNオブジェクトにテキストに変換することができますちょうどカスタムjava.beans.PropertyEditorです:

public class SsnEditor extends PropertyEditorSupport { 
    public String getAsText() {...} // converts SSN to text 
    public void setAsText(String str) { 
     // converts text to SSN 
     // throws IllegalArgumentException for invalid text 
    } 
} 

無効であり、SSNに変換できないsetAsText遭遇テキストは、それはIllegalArgumentException(のsetAsTextPropertyEditor当たり仕様)をスローした場合。私が抱えている問題は、テキストをオブジェクトに変換する(PropertyEditor.setAsText()経由)は、の前にが実行され、Springバリデーターが呼び出されるということです。 setAsTextIllegalArgumentExceptionをスローすると、Springは単にerrors.propertiesで定義された一般的なエラーメッセージを表示します。私が望むのは、入力されたSSNが無効である正確な理由に依存する特定のエラーメッセージです。理由は、PropertyEditor.setAsText()で判断されます。私はIllegalArgumentExceptionのテキストにエラー理由のテキストを埋め込んでみましたが、Springはそれを一般的なエラーとして扱います。

解決方法はありますか?繰り返すには、PropertyEditorによって生成された特定のエラーメッセージが、Springフォームのエラーメッセージに表示されます。私が考えることのできる唯一の選択肢は、コマンドにSSNをテキストとして保存し、バリデーターで検証を実行することです。 SSNオブジェクトへのテキストの変換は、フォームのonSubmitで行われます。これは私のフォーム(とモデル)が多くのプロパティを持っているので、それほど望ましくありません。私は、それぞれのすべてのモデル属性をテキストフィールドとして持つコマンドを作成して維持する必要はありません。

上記の一例であり、「...なぜテキストとしてSSNを格納していない」私の実際のコードは、人/ SSNはありませんが、そうで応答する必要はありません

+0

@Steve Kuo元の回答に追加 –

答えて

関連する問題