0

問題は一般的に言語/フレームワークにとらわれないものですが、それが重要な場合、私はGrailsと協力し、Grails固有のソリューションが存在する場合はそれに最も関心があります。

URLにマップされたフォームがあります:/foo/create。ユーザーがブラウザにこのURLを入力すると、フォームが表示されます。

フォームアクション属性は、メソッドを指示し/foo/save、メソッドを持ちますPOST。保存が成功すると、標準のpost-redirect-getパターンが適用され、ユーザーはにリダイレクトされ/foo/showます。

ただし、ユーザーが誤ったデータを指定した場合は、エラーメッセージが表示され、すべてのデータが保持された同じフォームが再度表示されます。この動作を実装するためにforward、フォームを生成するコントローラーに対して実行します(同じものがにマップされ/foo/createます)。

その後、ユーザーにはデータとエラーメッセージを含むフォームが表示されますが、ブラウザのURLフィールドはに変更され/foo/saveます。また、ユーザーがフォーカスをURLフィールドに変更し、Enterキーを押すと、404が表示されます(/foo/save+method=GETペアにマップされているものがないため)。

簡単に言うと、 URL/foo/saveはブラウザに表示されますが(フォームの送信後にリダイレクトがなかったため)、HTTPGETメソッドでアクセスした場合はどこにもリダイレクトされません。

この状況にどのように対処しますか?確かに、何かをマッピングすることはできますが/foo/save、間違ったデータのフォームが送信された後、ブラウザに表示されるURLを変更しない方法があるのでしょうか。

4

1 に答える 1

2

2 つのアプローチ:

  1. フォームはそれ自体に送信されます。つまり、ページが にリダイレクトされるのに成功した場合にのみ、 に/foo/create送信されます。これpost-redirect-get サイクルも使用し、送信されたデータをセッションに保存する必要がありますが、リダイレクトなしの単純な POST になる可能性があります。/foo/create/foo/show
  2. /foo/save /foo/createデータが無効であった/foo/show場合、またはデータが有効であった場合に、常に再度リダイレクトします。これは、セッションに保存されたデータで常に post-redirect-get サイクルを使用します。
于 2012-11-03T19:04:28.323 に答える