[Seasar-user:17257] [SAStruts]Actionの親クラスで定義した検証メソッドを使いたい

Tomoyuki Kano [E-MAIL ADDRESS DELETED]
2009年 4月 15日 (水) 05:56:43 JST


加納と申します
SAStruts を利用させて頂いています。

各Actionで利用する共通の検証メソッド(ActionFormには置きたくない)を
利用しようとすると

java.lang.IllegalArgumentException:
 object is not an instance of declaring class
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:96)
org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:122)
...

となります。ActionWrapperのソースを拝見したところ、検証メソッドが
ActionじゃActionFormのものかを判定する箇所で、親クラスのメソッドを
利用している場合誤判定していると思われます。

以下のように、親クラスのメソッドも利用できるようにして頂けませんでしょうか。

protected ActionForward execute(...) {
  ...
  Object target = actionForm;
  //if (cfg.getValidateMethod().getDeclaringClass() == actionMapping
  //        .getComponentDef().getComponentClass()) {
  if (cfg.getValidateMethod().getDeclaringClass()
    .isAssignableFrom(actionMapping.getComponentDef().getComponentClass())) {
       target = action;
  }
  ...
}

よろしくご検討下さい。



Seasar-user メーリングリストの案内