Ticket #7949

[Seasar-user:3119]ページの初期化処理で無限ループ
Eröffnet am: 2006-01-25 18:55 Letztes Update: 2006-02-03 16:25

Auswertung:
Verantwortlicher:
Typ:
Status:
Geschlossen
Komponente:
(Keine)
Meilenstein:
(Keine)
Priorität:
5 - Mittel
Schweregrad:
5 - Mittel
Lösung:
Keine
Datei:
Keine

Details

[Seasar-user:2725] [S2JSF] ErrorPageManagerImpl で無限
呼出し発生 で、
O.K.U. さんが報告されているのと、似たような現象ですが、
ページの初期化
処理で無限ループが発生して困っています。

s2jsf-example では、完全に再現ができないのですが、次の
ような感じ
です。

1. EmployeeSearchInitActionImpl#initialize を、以下のよ
うに変更.

----------------------------------------------------------------
public String initialize() {
System.out.println("初期化処理");
if(1 == 1) {
return "errorPage";
}
departmentDtoList =
employeeLogic.getAllDepartments();
return null;
}

----------------------------------------------------------------

2.faces-config.xml に、以下を追加

----------------------------------------------------------------
<navigation-rule>
<navigation-case>

<from-outcome>errorPage</from-outcome>

<to-view-id>/employee/errorPage.html</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>

----------------------------------------------------------------

3. /employee/errorPage.html を作ります。中身はなんでも
いいです。

この状態で、メニューからEmployee Management をクリック
すると、
EmployeeSearchInitActionImpl#initialize が2回実行され
ています。

この2回実行されている現象が関係しているのかどうかはわ
かりませんが、
こちらの作成中のシステムだと、2回目に同じ処理(上の例
だと、もう1度
Employee Management をクリックする)をすると、ページの
初期化処理が
無限に実行されてしまいます。

org.seasar.jsf.runtime.ErrorPageManagerImpl を使ってい
ない理由は、
エラーログに余計なログを吐きたくないため(log4j で、
ERROR の場合は
管理者へメールが送信される設定になっている)なのですが、
ためしに、org.seasar.jsf.runtime.ErrorPageManagerImpl
を使った方法
にしてみると、1回めは正しくエラーページが表示されるの
ですが、
2回目以降はブラウザに例外情報が表示されてしまい、エ
ラーページへ遷移
されません。

Ticket-Verlauf (1/1 Historien)

2006-02-03 16:25 Aktualisiert von: manhole
  • Ticket Close date is changed to 2006-02-03 16:25
  • Status Update from Offen to Geschlossen
Kommentar
Logged In: YES
user_id=10369

修正しました、1.0.13の次バージョンより修正を含みます。

■原因

dispatchでsubmitした画面へ遷移した際に、再度decode処理が行わ
れていたことでした。

(「3つめ」がループしないのは、[Seasar-user:2725]で対応した
ためです。)

■修正内容

リクエスト内で初回のLifecycleでのみ
- APPLY_REQUEST_VALUES (2)
- PROCESS_VALIDATIONS (3)
- UPDATE_MODEL_VALUES (4)
- INVOKE_APPLICATION (5)
のフェーズを実行するように変更しました。
(dispatch後のLifecycleではスキップします。)
初期化Actionは RENDER_RESPONSE (6) フェーズで行っているため、
この変更の影響を受けません。

Dateianhangliste

Keine Anhänge

Bearbeiten

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Anmelden