- PR -

セッションタイムアウト後に起きるExceptionについて

1
投稿者投稿内容
あさ
会議室デビュー日: 2006/03/14
投稿数: 8
投稿日時: 2006-12-22 17:13
お世話になります。

セッションタイムアウト時に出るExceptionについてご教授下さい。

ローカルでは、Exceptionは発生しないのですが、
テスト環境では、下記のExceptionが発生します。

javax.faces.FacesException: cannot add component with id '_id53' and path : {Component-Path : [Class: javax.faces.component.html.HtmlOutputText,Id: _id53]} to its parent component. This might be a problem due to duplicate ids.
at javax.faces.webapp.UIComponentTag.findComponent(UIComponentTag.java:401)
at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:219)

*************************************
【ローカル環境】
eclipce 3.0.1 JDK 1.4.2_08 Tomcat5.0

【テスト環境】
FedoraCore2 JDK1.5.6 Jboss4.0.3
*************************************

処理の流れとしては、セッションタイムアウト後に下記の処理でトップ画面に画面遷移します。
【セッションタイムアウト時の処理】
if (request instanceof HttpServletRequest) {

HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession session = httpRequest.getSession();

/* セッションが新しくなった場合は、トップページへ遷移する */
if (session.isNew()) {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/aaa/top.jsf");
return;
}
}

トップ画面で再ログイン後、選択画面 → 選択画面 → 選択画面と進み、
次にdataTableタグを使用した一覧画面になります。この画面には、
リンクボタンが6つほどあり、それぞれを押下するとその条件にあったdataTableの
一覧を表示します。それぞれに検索機能も付加してあります。
検索条件を入力し、検索ボタンを押下すると、Exceptionが発生します。
画面の説明がわかりにくく申し訳御座いません。

調べたところ、
『cannot add component ’_idNN’は、
ブラウザに表示されているコンポーネントの状態とサーバのセッションに格納されている
コンポーネントの状態が異なる場合に起きます。
セッションタイムアウトして、HTMLにコンポーネントを追加している状態で、サブミットすれば起きると思う。』
という記述がありました。

対処方法がよくわからず、どのあたりを注視すればよいのかご教授頂けたらと思います。

ちなみに、UIコンポーネントの保存場所は、web.xmlのjavax.faces.STATE_SAVING_METHODに
「client」で設定しています。

ながながと長文になり申し訳御座いませんが、宜しくお願い致します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-12-23 02:31
結構事例があるみたいですね。
どれか参考になりそうな過去事例はありませんか?

あと、「ローカル環境」を「テスト環境」のJDK/サーブレットコンテナのバージョンと合わせて現象が発生するか確認してみてはいかがでしょうか。
あさ
会議室デビュー日: 2006/03/14
投稿数: 8
投稿日時: 2006-12-25 09:41
返答、有難う御座います。

解決するのに参考になりそうな過去事例を確認することが出来ていません。
JSFのタグが関係しているみたいですが。
引き続き調べてみます。

まず、JDKのバージョンをあわすことからやってみます。
1

スキルアップ/キャリアアップ(JOB@IT)