0

したがって、このコントローラーにはリセット(一部のデータの消去)、インデックス、およびその他のメソッドがあるため、リセットメソッドの最後にインデックスメソッドへのリダイレクトがあります。違いは何ですか :

redirect(action: "index", id: params.id)

redirect(action: index, id: params.id)

最初のものは完全に機能し、インデックスメソッドでリダイレクトしますが、2番目のものは別のメソッドでリダイレクトします.(getEndMonthsListこれはコントローラーの最後のメソッドです)

4

2 に答える 2

2

あなたが示した2つのバリアントは、Grails 2より前は有効でした。これは、アクションを定義するためにクロージャーのみを使用できるためです。したがって、'index' にリダイレクトするかindex、2 番目のアプローチでクロージャー プロパティを参照していたためにリダイレクトでき、Grails はその名前から完全な URL を構築します。少し遅いので、常に String アプローチを使用する方が良いです。

2.0 では変更が加えられ、メソッドをアクションとして使用できるようになり、推奨されるアプローチになりました。したがって、indexメソッドがある場合、それは他の変数のように参照できるクラスの public フィールドではなくなり、名前で直接参照できないメソッドになります。したがって、機能するのは文字列アプローチだけです。

これを再現するために文字列以外のアプローチを使用しようとしましたが、説明した方法で失敗しませんでした。インデックスアクションがメソッドとして定義されている場合(予想どおり)、プロパティの欠落例外で失敗し、定義されたときに正常に機能しましたクロージャーとして(やはり、予想どおり)。

于 2012-10-03T15:41:23.940 に答える
0

最初のケースでは、Grails はコントローラー メソッドを名前で呼び出します。2 番目のケースでは、Grails はクロージャー名を取得し、コントローラー メソッドを名前で呼び出します。

見るorg.codehaus.groovy.grails.web.metaclass.RedirectDynamicMethod#establishActionName

于 2012-10-03T09:02:04.727 に答える