Super Agile Struts開発記その10 - Validator
commons-validatorを使った検証は、フィールドにアノテーションをつけることで行ないます。
メッセージを指定したい場合は、msg属性で指定します。
@Required
@IntegerType
public String arg1;
メッセージの引数は、arg0, arg1, arg2, arg3, arg4の属性で指定します。argxが存在するかどうかは、アノテーション(Validator)によって違います。
@Required(msg = @Msg(key = "errors.required"))
@Validwhenなど任意の引数を指定するものは、argsの属性で指定します。
@Required(arg0 = @Arg(key = "引数1", resource = false))
検証用の変数(Var)は、属性で指定します。
検証用の変数(Var)をメッセージの引数で指定したい場合は、keyの値を${var:変数名}で指定します。
@Minlength(minlength = 5)
メッセージの最初の引数は、ほとんどの場合、プロパティ名になりますが、メッセージリソースにlabels.プロパティ名 = xxxのエントリを書いておけば、自動的にその内容が適用されます。
@Minlength(minlength = 5,
arg1 = @Arg(key = "${var:minlength}", resource = false))
例えば、labels.arg1 = 引数1とメッセージリソースに書いておけば、プロパティ名がarg1のエラーのメッセージに自動的に適用されます。ほとんどの場合、適切なデフォルト値が割り当てられているので、msgとargxは書く必要がないと思います。
説明が最後になっちゃったけど、たぶん、最も待ち望まれていたと思うボタンごとにバリデーションを切り替える機能をつけました。やり方は、Teedaと同じで、target属性で検証の対象になるメソッド名を指定します。複数のメソッドを対象にする場合は、カンマで区切ります。target属性がない場合は、すべてのメソッドが検証の対象になります。
html:errorsタグでエラーのメッセージを表示する場合、publicフィールドを使っていれば、フィールドの記述順にエラーのメッセージが表示されます。
@Required(target = "hoge, foo")
後、Struts1.2.9の標準だと、commons-validator1.1.4が使われていると思いますが、Urlのバリデータがうまく動かないので、commons-validator1.3.1を使うようになっています。
これで、SAStrutsのコードは完成。後は、ドキュメントを書いて来週RC1をリリースします。