私のWebアプリケーション内の別のビューを開いて、指定されたオブジェクトに関する情報を表示するリンクが必要です。 grailのコントローラアクション間でオブジェクトを渡す最も良い方法は何ですか?grailのコントローラアクション間でオブジェクトを渡す最も良い方法
3
A
答えて
4
アクションは、chain controller methodを使用してチェーンできます。
連鎖を使用すると、あるアクションから次のアクションにモデルを保持することができます。
0
(後期パーティーに、しかし...)私は私が以下を行うことができますGrailsの2.4.4を、使用しています:
def usernameLogin() {
SecurityToken securityToken = authService.loginWithUserPass(params.user, params.pass)
chain action: 'afterLogin', model: [securityToken: securityToken]
}
def ssoLogin() {
SecurityToken securityToken = authService.ssoLogin(params.remoteUser, params.key)
chain action: 'afterLogin', model: [securityToken: securityToken]
}
def afterLogin() {
SecurityToken securityToken = (SecurityToken) chainModel['securityToken']
if (securityToken.valid) {
forward action: 'loggedInRedirect'
}
else {
forward action: 'loginFailed'
}
}
- セキュリティトークンは、文字列や列挙型を含むオブジェクトであります
- キーホープこのことができ
ターゲットアクション2)chainModelを使用して、ソース・アクション1)を用いて、「チェーン・アクション」です。
0
これまでの回答は不完全です。ですから、私はそれらを入力とともに編集し、より明確にしています。これは、(
がdef action1() = {
DomainClass domainInstance = DomainClass.findById(params.id);
chain (action: 'action2', model: [domainInstance: domainInstance]);
}
def action2() = {
DomainClass domainInstance = chainModel?.domainInstance ?: DomainClass.findById(params.id);
[domainInstance: domainInstance];
}
しかし、後継者のアクションは前任者のそれを再利用するのではなく、新鮮なデータベースセッション を使用しているようだ:アクションチェーン
:
は、2つのオプションがありますGrailsで を設定することもできますが、私はどのようにしてか分かりません)。そのため、遅れた のエンティティが後続アクションに完全にロードされず、 がLazyInitializationExceptionを返すことがあります(もちろんORMの設定にもよる)。
要求を転送:
def action1() = { DomainClass domainInstance = DomainClass.findById(params.id); forward (action: 'action2', model: [domainInstance: domainInstance]); } def action2() = { DomainClass domainInstance = request?.domainInstance ?: DomainClass.findById(params.id); [domainInstance: domainInstance]; }
ご覧のとおり、両方の構文はほぼ同じです。しかし、上記の問題のために、問題の要件に従って要求転送を優先すべきです。もう1つの重要な詳細は、ページの読み込み時/読み込み後のアドレスバーに表示されるURLに関するものです。リクエストを転送するとページURLが保持され、アクションを連鎖するとページURLが最新のアクションのURLに変更されます。
関連する問題
- 1. あるアクティビティから別のアクティビティにオブジェクトを渡す最も良い方法
- 2. ストアドプロシージャでテーブルを渡す最も良い方法は
- 3. PyroCMSのプラグインにページIDを渡す最も良い方法は?
- 4. grailで定数を持つドメインを設計する最良の方法
- 5. サーバー間でセッションを維持する最も良い方法は?
- 6. djangoデータをjavascriptに渡す最も良い方法
- 7. Dockerビルド中に設定ファイルを渡す最も良い方法
- 8. ファイルを関数に渡す最も良い方法
- 9. フォームにJS/CSS情報を渡す最も良い方法
- 10. オブジェクトからフィールドの値を返す最も良い方法
- 11. ログエントリの期間を表す最も良い方法
- 12. MySQLで時間間隔の値を保存する最も良い方法は?
- 13. オブジェクトに値を追加する最も良い方法は?
- 14. スプリングデータjpa - オブジェクトを返す最も良い方法は?
- 15. 親から子オブジェクトを作成する最も良い方法
- 16. 単語間のスペースを取り除く最も良い方法
- 17. 他のコンポーネントにデータを渡す最も良い方法は何ですか
- 18. VB.NET別のフォームに値を渡す最も良い方法は何ですか?
- 19. オブジェクトのプロパティを別のオブジェクトに接続する最も良い方法
- 20. Clearcaseで最も良い方法は?
- 21. アプリケーション内で、カスタムオブジェクトをアクティビティ間で渡す最も良い方法は何ですか?
- 22. フラッシュでオブジェクトをプログラムでスワップする最も良い方法は何ですか?
- 23. 一週間の時間を保存する最も良い方法
- 24. プログラムに型をサービスに渡す最も良い方法は何ですか?
- 25. リモートサーバー間でファイルを比較する最も良い方法は何ですか?
- 26. C++で多くの合成オブジェクトを定義する最も良い方法は?
- 27. モバイルとデスクトップの間でフォームを使用する最も良い方法
- 28. Socket.IO 2人のユーザー間でメッセージを送信する最も良い方法は?
- 29. WPFとSilverlightの間でコードを共有する最も良い方法
- 30. node.jsとdjangoの間でデータを共有する最も良い方法は?