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); } }
かなり強引な感じ。。