Struts2ではXWorkのValidationフレームワークが使える。ValidationhaActionの実行前にValidationルールを入力に行うことができる。
annotationを使ってValidationを行うことも可能。
Struts2 document Validation Annotation
Registering Validators
ValidationルールはValidatorによってハンドルされる。ルールはValidatorFactoryのregisterValidatorメソッドを使って登録されなければならない。
登録よりも簡単な方法として、validators.xmlをクラスパスのルート(/WEB-INF/classes)に置くことで、validatorがこのファイルを変わりに使ってくれる。
下の内容でvalidators.xmlを作れば、フレームワークで定義されている全てのValidatorを宣言できる。
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
</validators>
Note
カスタマイズしたValidatorが必要でないならば、validators.xmlをクラスパスに置くのは必須ではない。
xwork.jarの「com/opensymphony/xwork2/validator/validators/default.xml」に定義されていると、Validatorの所定の設定は自動的に行われる。
警告
カスタムValidatorを定義して、validators.xmlを作成してクラスパスに置いた場合、上記デフォルトのValidatorもvalidators.xmlに定義しないとだめ。
一度validators.xmlがクラスパスに検出されたら、デフォルトのValidator
(com/opensymphony/xwork2/validator/validators/default.xml)はロードされない。ロードされ
るのは、カスタムvalidators.xmlがクラスパスにみつからない場合だけなので注意。
Non-Field Validator Vs Field-Validator
Validatorをvalidation.xmlに定義するには2つ方法がある。
- <validator>
- <field-validator>