1

したがって、ViewExpiredExceptionハンドラーがあり、正常に動作します。これで、Webアプリを起動すると、URLは次のようwww.myApp.com/TestFaces/になり、ログインページである最初のページが表示されます。何らかの理由でログイン時にページを離れ、ビューの有効期限が切れた場合、アプリはViewExpiredExceptionをキャッチし、「ViewExpired」ページに送信しますが、URLは同じままwww.myApp.com/TestFaces/です。その「ViewExpired」ページには、ログインページに戻るためのcommandLinkがあり、値attribに「index.xhtml」を入力しましたが、ページがないため、ログインページに移動しませんwww.myApp.com/TestFaces/index.xhtmlwww.myApp.com/TestFaces/faces/index.xhtml

したがって、質問は次のとおりです。

  1. ログインページを表示しているときにViewExpiredExceptionが発生するのはなぜですか?ajaxのせいですか?
  2. commandLinkが実際にindex.xhtmlに送信されるようにするにはどうすればよいですか?

これは、ログインページでビューの有効期限が切れた場合にのみ発生します。私のアプリの他のページでは、非常にうまく機能します。

前もって感謝します !

4

1 に答える 1

1

ログインページにいるのに ViewExpiredException が発生するのはなぜですか? ajaxのせいですか?

セッションに存在しなくなったビューで POST リクエストを呼び出すと、この例外が発生します。これは、たとえば、サーバー側でセッションが期限切れになるまでページを開いたままにしておく場合や、サーバーから直接ではなくブラウザー キャッシュからログイン ページを取得している場合に発生する可能性があります。詳細についてはViewExpiredExceptionタグ情報ページもご覧ください。すべての JSF ajax リクエストも POST を使用するため、これに含まれます。


commandLink から実際に index.xhtml に送信されるようにするには、どのように、またはどこで行うことができますか?

暗黙的なナビゲーションを利用します。このようにして、JSF は適切なFacesServletマッピングを追加します。

public String goToIndexPage() {
    return "index";
}

また

<h:commandLink value="Go to index page" action="index" />

または、より良いのは、ビジネス ロジックをまったく呼び出す必要がない場合です。

<h:link value="Go to index page" outcome="index" />

以下も参照してください。

于 2011-11-28T16:06:52.970 に答える