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); } }