2009-08-30 31 views
8

(フォワード鎖、リダイレクトは)のようなキーを含むことができるマップを取りますこれらの2つの質問:Grailsの制御方法

  • 'id'はちょうど'id'という名前のリクエストパラメータのnエイリアス?換言すれば、間に違いがある:

chain(controller: "member", action: "showProfile", params: [id: memberId])

chain(controller: "member", action: "showProfile", id: memberId)

  • が(おそらくとりわけ)chain方法(モデル及び/又はのparamsを渡すことができマップ)をコントローラーアクションAからBに変更します。実際には、アクションAからBへのデータをパラメーターとモデルマップを介して渡すことの違いは何ですか?また、モデル・マップにデータが渡された場合は、コントローラー・アクションBでそのデータにアクセスするにはどうすればよいですか?

答えて

7

「id」は、「/ $ controller/$ action?/ $ id?」などのUrlMappingsエントリに由来します。 - 使用についてはhttp://docs.grails.org/latest/guide/single.html#urlmappingsを参照してください。

Paramsはクエリー・ストリング・パラメータまたはフォーム・ポスト・パラメータです。「request.getParameter( 'foo')」を使用してGrails以外のアプリケーションでアクセスされますが、Grailsでは「params.foo」として簡略化されます。モデルマップの内容は、Request.getAttribute( 'foo')を使用して非Grailsアプリケーションでアクセスされ、Grailsでは「request.foo」として簡略化され、通常はGSPで直接アクセスされます。 "$ {foo}"

+1

私はドキュメントを見ましたが、実際にはidはリクエストパラメータです。'params.id'を使ってコントローラーにアクセスします。それはあなたの理解と一致していますか? –

9

バートが言ったことはすべて正しいです。さらに、モデルを使用している場合はチェーンを実行し、リダイレクトする場合(モデルを保持しない場合)は、両方のメソッドがブラウザに302リダイレクト応答を返すためです。ブラウザは、次のページを尋ねることを知っています。

これは、元の要求があったページのURLではなく、結果のページのヘッダーに正しいURLを持っています。

このパターンは、ブックマークによるあらゆる種類の問題を回避し、ユーザーが表示されたページでリフレッシュを実行した場合に情報を再送信するため、POST後に非常に便利です。

例:書籍を保存していて、書籍が正常に保存されている場合はリストページをレンダリングする場合。あなたのメソッドで単に "controller.list()"を呼び出すと、レンダリングされる書籍のリストが表示されますが、URLバーには ".../book/save"と表示されます。ブックマークやリロードには適していません。代わりに、redirect/chainを呼び出すとブラウザに302レスポンスが送信され、 ".../book/list"ページが表示されます。すべての変数(モデルやその他のフラッシュメッセージ)はフラッシュスコープ内にあるため、モデル/ビューで使用できるようになり、世界中のすべてが幸せです。

このパターンをPost/Redirect/Getといいます。

関連する問題