1

Java サーブレットにポストされたフォームの検証を処理する方法の 1 つは、検証の失敗時に元の JSP ビューに戻すことです。これにより、ユーザーは、送信したばかりのフォームのコンテキストで検証の失敗があったこと (おそらく、必須フィールドに値を指定しなかった) を確認し、再試行できます。ただし、この戦略はよく知られている Post-Redirect-Get パターン ( http://en.wikipedia.org/wiki/Post/Redirect/Get ) に従っていないため、ブラウザの履歴にブックマーク不可のページ。ユーザーが後で履歴/戻るボタンを使用してこのページにアクセスしようとすると、ドキュメントの期限切れの例外が発生します (少なくとも Firefox 19 では)。これはどのように処理する必要がありますか?より良い方法はありますか?

注: 私が説明している戦略は、サーブレット情報ページ ( https://stackoverflow.com/tags/servlets/info ) で実際に推奨されています。ただし、ブラウザの履歴の問題については言及されていません。

注: この質問は似ています: ( JSF PRG with validation error )。投稿には AJAX を使用することをお勧めします。これが推奨される戦略である場合、サーブレット wiki を更新する必要があるのでしょうか? とにかく、これがJSFからサーブレットにどのように変換されるかは正確にはわかりません。

4

1 に答える 1

1

私が知る限り、検証失敗のアプローチには欠陥があり、使用すべきではありません。代わりに、次のいずれかを使用します。

  1. 検証エラー メッセージをセッションに保存し、リダイレクトを行います。

  2. AJAX を使用してフォームを送信する

  3. JavaScript を使用してクライアント上のすべての検証エラーをキャッチし、サーバーに到達する検証エラーをアプリケーション エラーとして扱い、誰かがアプリケーション フォームを使用せずに直接サーバーに投稿したり、アプリケーション フォームにバグがあると想定します。エラー ページに転送すると同じ問題が発生しますが、攻撃者はブラウザの履歴をジャックアップする必要があります。セッションが利用可能な場合は、セッションにエラー メッセージを詰め込んでリダイレクトすることができます。いずれにせよ、「通常の」操作でサーバーから検証を削除し、問題を多少回避します。

于 2013-03-27T17:13:54.273 に答える