我想要一個鏈接來打開webapp中的另一個視圖來顯示有關指定對象的信息。 什麼是在控制器之間傳遞對象的最佳方式?在grails中控制器操作之間傳遞對象的最佳方式
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'
}
}
- SecurityToken是包含字符串和枚舉對象
- 密鑰使用源動作「鏈動作」,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]; }
然而,繼任者的行動似乎使用一個新的數據庫會話 不是重用的前身(可能也可以在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]; }
不同於前面的情況,請求轉發重新使用現有的會議,以便延遲加載的問題不會發生。
正如您所看到的,兩者的語法幾乎完全相同。但是,由於上述問題,您應該根據相關要求轉發請求轉發。另一個重要的細節是關於在頁面加載時/之後在地址欄中查看的URL。轉發請求將保留頁面URL,同時鏈接操作會將頁面URL更改爲最新操作的頁面URL。
相關問題
- 1. Angluarjs控制器之間傳遞對象
- 2. 在視圖控制器之間傳遞數據/對象/ moc - 最佳實踐
- 3. 在Rails中的操作之間插入控制器操作 - 最佳實踐
- 4. iphone開發中的對象之間傳遞數據的最佳方式?
- 5. 在asp.net應用程序之間傳遞對象的最佳方式
- 6. JSF在控制器之間傳遞對象值
- 7. 在兩個控制器之間傳遞一個對象
- 8. 在視圖控制器之間傳遞非靜態對象
- 9. 在視圖控制器之間傳遞對象
- 10. 如何在Grails控制器之間傳遞錯誤消息?
- 11. 在MonoTouch中在視圖控制器之間傳遞數據的最佳方式(緩存數據)
- 12. 在視圖控制器之間傳遞對象的three20方法是什麼?
- 13. 在視圖控制器之間傳遞一個對象,該對象在新控制器中是否爲空?
- 14. 將對象傳遞給控制器操作
- 15. 在控制器之間傳遞數據
- 16. 在ROR控制器中的方法之間傳遞變量
- 17. 在表單之間傳遞連接對象的最佳方法是什麼?
- 18. 在控制器中的兩個動作之間傳遞值
- 19. 如何在工廠之間傳遞控制器之間的值?
- 20. 在應用程序中,在活動之間傳遞自定義對象的最佳方式是什麼?
- 21. 如何從一個控制器傳遞對象實例的動作在其他控制器的Grails
- 22. Rails的在同一個控制器動作之間傳遞值
- 23. 在vue.js中的組件之間傳遞數據的最佳方式是什麼?
- 24. 在Winforms C#中的GUI之間傳遞變量的最佳方式是什麼?
- 25. 在UISplitViewController和其他視圖控制器之間切換的最佳方式?
- 26. 如何在控制器之間傳遞數據和重載操作?
- 27. 將參數從控制器傳遞給攔截器在Grails 3.x中的()操作之後
- 28. 在控制器之間傳遞對象/字符串(GET&POST)的彈簧
- 29. Grails的控制器傳遞參數
- 30. 在控制器方法之間傳遞數據