prepareインターセプターについて

Struts2のprepareインターセプターを利用するとメソッド実行前に処理を行わせることができるようになる。
実行するメソッドによって前処理で行う内容を変更したい場合は、staticParamsでパラメータを注入してもらい、その値で振り分けるようなことを考えていた。

Struts2の設定的にはこなん感じのイメージ

<action name="sample" class="SampleAction" method="doFoo">
  <param name="mode" value="foo">
</action>
<action name="sample" class="SampleAction" method="doBar">
  <param name="mode" value="bar">
</action>

そしてActionは

  String mode;
  public void setMode( String mode ) {
    this.mode = mode;
  }
  void prepare() throws Exception {
    if ("foo".equals(mode)) {
      // fooの前処理
    } else {
      // barの前処理
    }
  }

こんな感じとなる。

しかし、prepareインターセプターにはもっとストレートに振り分ける機能があった。
この方法だとパラメータで渡してもらう必要もない。

なんと、呼び出すメソッドの前にprepareを付けたメソッドが自動で呼ばれるのである。

  void prepareDoFoo() throws Exception {
      // fooの前処理
  }
  void prepareDoBar() throws Exception {
      // barの前処理
  }
  void prepare() throws Exception {
      // 何もしない
  }

本家Guideのhttp://struts.apache.org/2.0.11.2/docs/prepare-interceptor.htmlを良く見るとそんな事が確かに書いてある。

ちょっとTIPS:alwaysInvokePrepareをfalseにすれば prepare() は呼ばれなくなる