[Seasar-user:4699] [S2JSF]ValueBindingが正しく実行されないケースの件

Shun Saito [E-MAIL ADDRESS DELETED]
2006年 9月 25日 (月) 17:13:30 JST


斎藤@サイエンティアです。

現在開発中のシステムで以下のような動作をする処理を組み込んで
います。

URLで呼び出し画面を指定した際に、
・ログイン済の時(セッションが有効なとき)はそのまま画面が表示する
・未ログインの時(セッションが無効なとき)は一旦ログイン画面を表示し、
 ログイン処理を経由してから画面を表示する

このような処理で以下のように操作をするとValueBindingが正しく
行われません。

1.ログイン処理を実行し、何らかの画面が表示される
2.ログアウト処理(HttpSession#invalidate)を実行し、その後
  ログイン画面が表示される
3.ログイン画面以外の画面を指定して呼び出しを行う
4.未ログインのため、ログイン画面が表示される

この4.のログイン画面表示で行っているValueBindingが正しく実行
されません。
具体的には以下のようになります。

ログイン画面には例えば、

<form id = "fm" name = "fm" method = "post" m:passthrough="true">
  <input type="hidden" id="txtSite" value="#{hrSession.site}" />

といった記述があり、セッションスコープのコンポーネントhrSession
から値を取得してvalueに設定しています。
(上記操作の1,2のログイン画面表示処理ではそのように動作して
います)
これが4で表示されるログイン画面ではhrSessionのgetterメソッド
が呼び出されておらず(eclipseのブレークポイントで監視した結果)、
valueに入っていたのはURLのパラメータであるtxtSiteの値でした。

ValueBindingの記述にはコンポーネント名が明記されているので、
パラメータから値が設定されることはないと思うのですが、パラメータ
を変えて呼び出してみると、変えた通りに設定されていました。

ログイン画面はfaces-config.xmlに
<navigation-rule>
	<navigation-case>
		<from-outcome>Login</from-outcome>
		<to-view-id>/login/login.html</to-view-id>
		<redirect/>
	</navigation-case>
</navigation-rule>
と定義されており、
 1.対象画面を呼び出し
 2.画面初期化処理にインターセプタが割り込み
 3.セッションの内容をチェックして未ログインであれば
   "Login"をreturn
という流れで呼び出されます。

この件につき原因や調査すべきポイントがおわかりになる方が
いらっしゃいましたらご教授下さい。
よろしくお願いします。

ちなみに使用している環境は、
s2jsf-example-1.0.15を元にした開発環境
(s2-jsf1.0.16,s2container-2.3.10,S2-dao1.0.35に差替え)
tomcat5.5.17 です。

---------------------------------------------------
株式会社サイエンティア 東京支店HR開発グループ 斎藤 俊
e-mail:[E-MAIL ADDRESS DELETED]
web:http://www.scientia.co.jp
---------------------------------------------------




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