[Seasar-user:15375] Re: [Teeda] ダイナミックプロパティが全て終了するタイミングで任意の処理をしたい

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 8月 13日 (水) 04:00:10 JST


小林 (koichik) です.

Date:    Tue, 12 Aug 2008 22:07:41 +0900
From:    "はっしぃ" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:15373] [Teeda] ダイナミックプロパティが全て終了するタイミングで任意の処理をしたい

> ダイナミックプロパティが全て終了するタイミングで任意の処理がしたいのですが、
> なにかよい方法は、ないでしょうか?
> 
> 理由は、
>  ・各画面の項目のデコード処理をダイナミックプロパティでやってしまっている。
>  ・デコード処理は、ThreadLocal を利用したコードキャッシュを実装している。
>  ・Tomcatがスレッドを再利用するため、上記タイミングでキャッシュをクリアしたい。
> です。

JSF の PhaseListener を使うのが簡単かも.

public class MyPhaseListener implements PhaseListener {
  public void afterPhase(PhaseEvent event) {
    //ThreadLocal をクリア
  }

  public void beforePhase(PhaseEvent event) {
  }

  public PhaseId getPhaseId() {
    return PhaseId.RENDER_RESPONSE;
  }
}

を用意して,WEB-INF/faces-config.xml で

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
  <lifecycle>
    <phase-listener>
      xxx.MyPhaseListener
    </phase-listener>
  </lifecycle>
<faces-config>

と登録すると,レンダリングが終わった後に
処理を行えます.

> どうもprerender以降にダイナミックプロパティが実行されていたのを最近
> 気がつきまして。。。orz

"pre"render ですから.(^^;


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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