S2StrutsのPOJO Actionにおけるvalidation処理の切り替え

 Actionクラスを1画面1Actionのルールで作成して、parameter属性でボタン毎のメソッドを振り分けています。呼び出すメソッド毎にvalidation処理を切り替えたいのですが、何か良い方法はあるでしょうか。
 POJO Formを引数にvalidateメソッドを実行したら、そのPOJO Formに設定されているvalidationが行えると良いなぁと思っています。

【追記】
 Strutsのソースを調査して作成してみました。一応うまく動いているようです。

PojoFormValidatorFacade.javaファイルの作成

import org.apache.struts.action.ActionMessages;

public interface PojoFormValidatorFacade {

    public ActionMessages validate(String validationKey, Object pojoForm);

}


PojoFormValidatorFacadeImpl.javaファイルの作成

import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorException;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.validator.BeanValidatorForm;
import org.apache.struts.validator.Resources;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

public class PojoFormValidatorFacadeImpl implements PojoFormValidatorFacade {

    public ActionMessages validate(String validationKey, Object pojoForm){
        BeanValidatorForm validatorForm = new BeanValidatorForm(pojoForm);
        ActionMessages errors = new ActionMessages();
        Validator validator = Resources.initValidator(
                validationKey,
                validatorForm,
                SingletonS2ContainerFactory.getContainer().getServletContext(),
                SingletonS2ContainerFactory.getContainer().getRequest(),
                errors,
                0);
        try {
            validator.validate();
        } catch (ValidatorException e) {
        }
        return errors;
    }

}


PojoFormValidator.javaファイルの作成

import org.apache.struts.action.ActionMessages;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

public class PojoFormValidator {

    public static ActionMessages validate(String validationKey, Object pojoForm){
        return getPojoFormValidatorFacade().validate(validationKey, pojoForm);
    }

    private static PojoFormValidatorFacade getPojoFormValidatorFacade() {
        return (PojoFormValidatorFacade) SingletonS2ContainerFactory.getContainer().getComponent(PojoFormValidatorFacade.class);
    }
}


diconにコンポーネントを登録



呼び出し方法

 呼び出しは、validation.xmlのname属性とPOJO Formを渡します。name属性を呼ばれたメソッド毎に変えれば、バリデーション処理の内容も変更可能です。

ActionMessages errors = PojoFormValidator.validate("entryForm", entryForm);