Validator/Converterをまとめる


そういえばいつか書こう書こうと思ってましたが、

Teedaでは、ValidatorやConverterをまとめて記述することが出来ます。

これは特に定数アノテーションしか使えない場合に威力を発揮します。

定数アノテーションは若干面倒だし、タイプミスする可能性もあるので。


サンプル実装を下記に示します。

まずはValidatorChainを継承して、Validatorを作ります。

(クラス名を本当はXxxValidatorChainにしたいのですが、

たぶんS2のValidatorのデフォルトの規約上見つけられない気がするのでXxxValidatorとします)

public class AddInputPageValidator extends ValidatorChain {

	private TRequiredValidator requiredValidator;
	
	private TLengthValidator lengthValidator;

	public TLengthValidator getLengthValidator() {
		return lengthValidator;
	}

	public void setLengthValidator(TLengthValidator lengthValidator) {
		AssertionUtil.assertNotNull("lengthValidator", lengthValidator);
		this.lengthValidator = lengthValidator;
		this.lengthValidator.setMinimum(3);
		add(lengthValidator);
	}

	public TRequiredValidator getRequiredValidator() {
		return requiredValidator;
	}

	public void setRequiredValidator(TRequiredValidator requiredValidator) {
		AssertionUtil.assertNotNull("requiredValidator", requiredValidator);
		this.requiredValidator = requiredValidator;
		add(requiredValidator);
	}
	
}

で、今まで下記のようにばらばらに記述していたValidatorを、

//BEFORE
	public static final String arg1_TRequiredValidator = null;

	public static final String arg1_lengthValidator = "minimum=3";

	public static final String arg2_TRequiredValidator = null;

	public static final String arg2_lengthValidator = "minimum=3";


このようにすっきりまとめることが出来ます。2つくらいなら大したこと無いですが、

実際の案件ではもっとたくさんのValidatorがあるでしょうから。

//AFTER
	public static final String arg1_addInputPageValidator = null;

	public static final String arg2_addInputPageValidator = null;


共通チームがまとめてValidatorを作って、複数の入力項目で同様のチェックを

行う場合なんかはこちらの方法のほうが有効です。



Tigerの場合はそれに更にTigerアノテーションを作る必要があります。

@Retention(RetentionPolicy.RUNTIME)
@Target( { ElementType.FIELD, ElementType.METHOD })
@Validator("addInputPageValidator")
public @interface AddInputPageValidate {

}


Validator名がダサいですが(w、大体このような感じでValidator/Converter

またはその複合を提供することが出来ます。