WebWork2のValidatorをメソッド毎に指定できるようにしてみる

com.opensymphony.xwork.validator.AnnotationActionValidatorManagerを継承したクラスを作り下記のように実際はcontextが設定されるとこに実行メソッド名を渡すようにし、ActionValidatorManagerFactory.setInstance(new ActionMethodValidatorManager());をlistenerなどで実行するようにすると、Actionクラスと同じパッケージの

クラス名-メソッド名-validation.xml

のファイルが実行されるようになる。

public class ActionMethodValidatorManager extends AnnotationActionValidatorManager {

    /**
     * see below.
     * @see com.opensymphony.xwork.validator.ActionValidatorManager#getValidators(java.lang.Class, java.lang.String)
     */
    @Override
    public synchronized List<Validator> getValidators(Class clazz, String context) {
        ActionProxy proxy = ActionContext.getContext().getActionInvocation().getProxy();
        String method = proxy.getMethod();
        if (method != null && method.length() > 0) {
            List<Validator> validators = super.getValidators(clazz, method);
            if (validators.size() > 0) {
                return validators;
            }
        }
        return super.getValidators(clazz, context);
    }
}

かなり強引な感じ。。