このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
検証ルールは <validator> 要素で定義されている。
独自のルールを作る場合は、自前で用意しなければならない。
そこで、既存のルールを参考にしながら調べてみよう。
とりあえず、required ルールの設定を眺めてみる。
<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
org.apache.commons.validator.Validator,
javax.servlet.http.HttpServletRequest"
msg="errors.required"/>
name 属性は、ルールの名前。これは明らかだ。
msg 属性は、エラーメッセージとして使われる、
メッセージリソースのキーの既定値となる。
classname 属性が、検証を実行するクラスの FQCN で、
method 属性が、そのクラスのメソッド名となる。
methodParams 属性は、メソッドに渡す引数の型である。
カンマで区切って、引数の FQCN を並べる。
required ルールの場合、検証処理の実体は、
org.apache.struts.validator.FieldChecks クラスの、
validateRequired メソッドであり、
その引数は 6 つということになる。
required ルールの場合、各引数には以下の値が渡される。
・java.lang.Object
検証対象の Form Beam
・org.apache.commons.validator.ValidatorAction
ルール自身の <validator> 要素の設定を含むクラス
・org.apache.commons.validator.Field
制約内容を表す <field> 要素の設定を含むクラス
・org.apache.struts.action.ActionMessages
検証結果を格納する Struts の ActionMessages。
・org.apache.commons.validator.Validator
検証メソッドを呼び出したクラス
・javax.servlet.http.HttpServletRequest
現在の HTTP 要求を含む HttpServletRequest。
validateRequired メソッドはこの値を使って、
検証処理を実行して結果を返しているのである。