[cubby-user:48] Re: Actionメソッド内でActionメソッドを呼び出した場合、initializeメソッドが2度実行される

Hirokazu Tanaka [E-MAIL ADDRESS DELETED]
2008年 4月 19日 (土) 16:19:53 JST


馬場さん

対処方法ありがとうございます。
indexメソッドの中で、フォワードする前にいろいろ処理を
しているため、下記のような感じで対処しました。

@Path("hoge")
public ActionResult hoge() {
	// 省略
	return forwardToIndex();
}

@Path("")
public ActionResult index() {
	return forwardToIndex();
}

private ActionResult forwardToIndex() {
	// 処理
	return new Forward("index.jsp");
}

ここから要望になります。
Actionクラスのinitializeという名前のメソッドなので、
Actionクラスのプロパティの初期化やログインチェック等を記述
したりする使い方で問題ないと思いますが、
実際に呼び出されるタイミングが、
Actionクラスの生成時ではなくて、Actionメソッド
の呼び出し時という点がはじめて使う人は
少し違和感を感じる気がします。

それと、それぞれのメソッドでパラメータが異なったりするので、
各メソッド呼び出し前に共通でパラメータを取得して何かする
という状況はあまり少ない気がします。

また、以前に実装していただいた、failメソッドでも、下記のように
Actionメソッドを呼び出すことにより、見やすいコードが
書けています。

@Override
public ActionResult fail(final String errorPage) {
	return top();
}

ぜひ、Actionクラス生成時にプロパティの初期化等を行う
メソッドの実装の検討、もしくはinitializeメソッドの
仕様変更の検討をよろしくお願いいたします。

08/04/19 に BABA,Yasuyuki<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 馬場です。
>
>  アクションメソッドの呼び出し毎に initialize() メソッドが呼び出されるのは
>  想定した動作です。メソッドにインターセプタを適用することによって
>  initialize() メソッドの呼び出しやバリデーション等を行っているため、その
>  ような動作になっております。
>
>  ご提示いただいたケースだと、共通の処理を行う private メソッドを作成し
>  て、hoge() と index() から呼び出すことで回避できないでしょうか?
>
>
>     @Path("hoge")
>     public ActionResult hoge() {
>         // 省略
>
>         return forwardToIndex();
>
>     }
>
>     @Path("")
>     public ActionResult index() {
>         // 省略
>
>         return forwardToIndex();
>     }
>
>     private ActionResult forwardToIndex() {
>
>         return new Forward("index.jsp");
>     }
>
>
> これならば、インターセプタが実行されないので initialize() メソッドが複数
>  回実行されることはありません。
>
>  ご検討をお願いします。
>
>  Hirokazu Tanaka さんは書きました:
>
> > お世話になります。田中です。
>  >
>  > Actionクラスのinitializeメソッドを使用して、
>  > プロパティの初期化やログイン判定処理などをしようと考えてます。
>  > 下記のコードのように、Actionメソッドの中でActionメソッド
>  > を呼び出した場合、hoge()メソッド呼び出し前と、
>  > index()メソッド呼び出し前に、合計2回、initialize()メソッドが
>  > 実行されてしまいます。
>  > Actionクラスが生成されたときに1回だけ、initialize()メソッドが
>  > 実行されるように変更することは可能でしょうか?
>  >
>  >
>  > public class HogeAction extends Action {
>  >     public List<String> hogeList;
>  >
>  >     @Override
>  >     public void initialize() {
>  >         hogeList = new ArrayList<String>();
>  >         hogeList.add("hoge1");
>  >         hogeList.add("hoge2");
>  >         hogeList.add("hoge3");
>  >
>  >         // ログイン判定処理など
>  >         // 省略
>  >     }
>  >
>  >
>  >     @Path("hoge")
>  >     public ActionResult hoge() {
>  >         // 省略
>  >         return index();
>  >     }
>  >
>  >     @Path("")
>  >     public ActionResult index() {
>  >         // 省略
>  >         return new Forward("index.jsp");
>  >     }
>  > }
>  >
>  >
>  > 以上になりますが、よろしくお願いします。
>  >
>  > --
>  > Hirokazu Tanaka
>  >
>  >
>  >
>
> > ------------------------------------------------------------------------
>  >
>  > _______________________________________________
>  > cubby-user mailing list
>  > [E-MAIL ADDRESS DELETED]
>  > https://ml.seasar.org/mailman/listinfo/cubby-user
>
>
>
>  --
>  BABA,Yasuyuki
>  [E-MAIL ADDRESS DELETED]
>
>
>  --------------------------------------
>  GANBARE! NIPPON! Win your ticket to Olympic Games 2008.
>  http://pr.mail.yahoo.co.jp/ganbare-nippon/
>  _______________________________________________
>  cubby-user mailing list
>  [E-MAIL ADDRESS DELETED]
>  https://ml.seasar.org/mailman/listinfo/cubby-user
>


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