S2Strutsでアノテーションを利用したカスタムValidationの作成
S2Strutsでアノテーションを利用したカスタムValidationの作成をするには次の手順をやっていきます。
アノテーションで変数がある場合のみ次の手順も行う
- ConfigRegisterの作成
- validator.dionに追記
新規Validation作成
package org.seasar.struts.examples.validator; import javax.servlet.http.HttpServletRequest; import org.apache.commons.validator.Field; import org.apache.commons.validator.Validator; import org.apache.commons.validator.ValidatorAction; import org.apache.commons.validator.util.ValidatorUtils; import org.apache.struts.action.ActionMessages; import org.apache.struts.validator.Resources; public class HogeCheck { public static boolean validate(Object bean, ValidatorAction validatorAction, Field field, ActionMessages errors, Validator validator, HttpServletRequest request) { String value = ValidatorUtils.getValueAsString(bean, field.getProperty()); String doubt = field.getVarValue("doubt"); if (value.compareTo(doubt) != -1) { errors.add(field.getKey(), Resources.getActionMessage( validator, request, validatorAction, field)); return false; } return true; } }
application.propertiesに追記
errors.hoge={0}は{1}じゃあだめです
validator-rules.xmlに追記
<validator name="hoge" classname="org.seasar.struts.examples.validator.HogeCheck" method="validate" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, org.apache.commons.validator.Validator, javax.servlet.http.HttpServletRequest" depends="" msg="errors.hoge"/>
Validationアノテーションの作成
package org.seasar.struts.examples.validator.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.seasar.struts.validator.annotation.tiger.ValidatorTarget; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @ValidatorTarget public @interface Hoge { String doubt(); }
ConfigRegisterの作成
package org.seasar.struts.examples.validator.config; import java.util.Map; import org.apache.commons.validator.Field; import org.apache.commons.validator.Var; import org.seasar.struts.validator.config.ConfigRegister; public class HogeConfigRegisterImpl implements ConfigRegister { public void register(Field field, Map parameter) { String doubt = (String) parameter.get("doubt"); Var var = new Var(); var.setName("doubt"); var.setValue(doubt); field.addVar(var); } }
validator.dionに追記
<component name="hogeConfigRegister" class="org.seasar.struts.examples.validator.config.HogeConfigRegisterImpl"/>
注意点
validator-rules.xmlに記述するnameとアノテーションの命名が一致していること。
アノテーションとConfigRegisterのプレフィックスが一致していること。
(一致していないとAPサーバ起動時にコンテナの読み込み対象外になってしまうようだ)
参考サイト
- S2Strutsで利用できるアノテーションを使用したValidationを作成
- http://s2struts.seasar.org/ja/validation.html