2011-06-20 24 views
1

いくつかのセッションBean(すべてのBeanはセッションBeanです)を使用して実行しているJSF 2.1(MyFaces)アプリケーションがあります。 タイムアウトがのようなweb.xmlで定義されていますJSF 2セッションBeansの問題

1時間に変換
<session-config> 
    <session-timeout>3600</session-timeout> 
</session-config> 

問題は、通常の使用で、私はNo Saved View...例外を取得することである:

SEVERE: An exception occurred 
javax.faces.application.ViewExpiredException: /mainPanel.jsfNo saved view state could be found for the view identifier: /mainPanel.jsf 
    at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:128) 

豆は、現在、EclipseのIDEとの互換性のためのfaces-config.xmlで定義されています。

私はこれを引き起こしている可能性がありますが、それは間違いなくタイムアウトではありません。 何が問題なのでしょうか?

私が提供できる任意の更なる情報があれば、私は...

感謝を教えて!

P.Sは - 1分を意味し、私はちょうど60考え出し何jsf-2.1タグ

アップデート1ありません! :-)それは問題かもしれません。

  1. エラーが/mainPanel.jsfのために特別ですが、この:それはそのよう

    アップデート2のthatsはなかったこと...役に立つかもしれませんいくつかのより多くの情報を判明した場合、私は疑問を閉じます実際にはxhtmlの構成を使用しています<ui:include>

  2. これは、アプリ内の特定の1つのポイントをクリックしたときにのみ発生します。クリックの結果として実行されるコードは次のとおりです。

Jqueryコード:

$(document).ready(function() { 

    $("#someTable tr:not(:first)").click(function(event) { 

      var someValue = $(this).find("input:hidden").val(); 
      $('#currently_selected').val(someValue); 
      $('#currently_selected').change(); 

     }); 
    }); 

JSF 2コード:

<h:form prependId="false" class="hide"> 
    <h:inputText value="#{someBean.someBeanValue}"> 
     <f:ajax event="change" listener="#{someBean.someBeanValueChanged}" render=":anotherForm" 
      onevent="ifCompleteSetWindowHash" /> 
    </h:inputText> 
</h:form> 

答えて

1

これを行うには、javax.faces.ViewState隠しフィールドの上にいくつかの副作用のようです。このフィールドがオーバーライドされると、ViewExpiredExceptionがスローされます。他のさまざまなJavaScriptコードでやっていることをやってみてください。

とにかく、あなたのsession-configパラメータとは関係ありません。ここで提供される情報は、それを再現するには不十分です。以前の提案で問題が解決しない場合は、MyFaces Issue Trackerに問題を作成し、例を添付してください。こうしてあなたはそれを解決するでしょう。

+0

ありがとう@ Lu4242、私はいくつかの 'h:inputHidden'コンポーネントを' h:inputText class = "hide" 'に変更しました。問題は消えてしまったようです。これは理にかなっていますか? – Ben

0

私は$シンボルはEL式の予約文字であると信じてJSF (編集:下記のとおり、 '$'は予約されていませんが、サードパーティのコンポーネントライブラリは、さまざまなJavaScriptライブラリを使用している可能性がありますe jQueryとのネーミング競合)。 jQuery関数の呼び出しを明示的な長いフォーム名に変更して、その違いがあるかどうかを確認してください。

例:代わりに...の

$(document).ready(function() { 

...最初のビューで

jQuery(document).ready(function() { 
+1

これは当てはまりません。 '$ {...}'(中括弧を含む)のみが予約されています。 jQueryに関しては、Prototype、Scriptaculousなどのような別のJSライブラリで既に '$()'関数が使用されていて、未知/未定義の関数名JSエラーが発生する場合にのみ該当します。 – BalusC

+0

はいこれが正しい! Primefaceのようなサードパーティ製のコンポーネントライブラリの多くは、そのようなJSライブラリを多くのコンポーネントで使用しています。このような命名の競合を避けるために、サードパーティのコンポーネントライブラリが存在しない場合でも、JSFアプリケーション内でjQueryの長いフォームを使用することがベストプラクティスだと感じています。これはまだOPの問題かもしれません。 –

+0

これはjQueryの問題であるという印象はありません。症状はこの方向を指していません。 – BalusC