2011-10-20 6 views
0

これは私が継承した問題です。セキュリティ上の理由から、no-cacheが設定されているJSF/RichFaces/Seamアプリケーションがあります。この問題は、ユーザーがバック・ボタンを押してフォームの再送信を引き起こした場合に発生します。バックボタンを押した後のフォームの再POSTにより、バッキングBeanのプロパティがnullに設定されることがあります(矛盾している場合もあります)。キャッシングがプライベートに設定されている場合、これは発生しません。残念ながら、それは選択肢ではありません。no-cacheが設定されたJSFアプリケーションで戻るボタンを使用するにはどうすればよいですか?

私はこのための回避策を探していましたが、私はそこに1つがあるかどうかわかりません。

これに使用する標準パターンを知っている人はいますか?

答えて

0

これに使用する標準パターンを知っている人はいますか?

はい、Post-Redirect-Getパターンです。 POST後にGET要求へのリダイレクトを実行するには、ナビゲーションケースに<redirect/>を追加します。戻るボタンは代わりにGETリクエストに移動します。 JSF 2.xでは、?faces-redirect=trueパラメータを結果に追加することでこれを行うこともできます。

ウェブアプリケーションがPOSTリクエストではなくページからPOSTリクエストを自己(好ましくはajax風味)に送信しているように、ウェブアプリケーションがうまく開発されていないと、不都合があります。この方法では、リクエストスコープのBeanは、リダイレクトされたGETリクエストでは使用できなくなります。

また、プレーンなバニラページツーページナビゲーション(例:メニューリンクなど)のために出力リンクの代わりにコマンドリンクを使用している場合は、それらを出力リンクに固定する必要があります。 POSTを使用すると、ここでは全く価値がありません。最初からGETする必要があります。

理想的には、JSF 1.x Webアプリケーションでは、SEO、ブックマーク機能、ユーザーエクスペリエンスを最適化したい場合は、ナビゲーションケースを用意する必要はありません。

+0

アクションが特定の結果を返すときにこれらのPOSTSに適用されるナビゲーションルールがあります。ナビゲーションから別のリダイレクトを追加しようとすると、そのリダイレクトの方法で取得されます。 –

+0

あなたが言っていることは、とにかくナビゲーションからの他のリダイレクトを行うべきではないことを暗示していますか?ユーザーエクスペリエンスは間違いなく苦しんでいますが、私たちはSEOやブックマーク機能についてあまり心配していません。 –

+0

このPOSTはコマンドリンクの結果ではなく、代わりにcommandButtonの結果であることを言及する必要があります。 –

関連する問題