我想要一个链接来打开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. Kohana - 在控制器之间传递ORM对象的最佳方式?
- 2. Angluarjs控制器之间传递对象
- 3. 在视图控制器之间传递数据/对象/ moc - 最佳实践
- 4. 在不同线程中的类之间传递对象的最佳方式?
- 5. 在Rails中的操作之间插入控制器操作 - 最佳实践
- 6. iphone开发中的对象之间传递数据的最佳方式?
- 7. Swift中在视图控制器之间传递对象
- 8. 在asp.net应用程序之间传递对象的最佳方式
- 9. 在Angularjs的控制器之间传递对象
- 10. 在grails中跨控制器传递对象
- 11. 控制器在列表中传递列表的最佳模式
- 12. 在视图控制器之间传递非静态对象
- 13. 在视图控制器之间传递对象
- 14. 可可应用程序在控制器之间传递对象
- 15. 如何在视图控制器之间传递对象
- 16. JSF在控制器之间传递对象值
- 17. 在两个控制器之间传递一个对象
- 18. 什么是故事板视图之间传递对象的最佳方式?
- 19. 在MonoTouch中在视图控制器之间传递数据的最佳方式(缓存数据)
- 20. 如何在Grails控制器之间传递错误消息?
- 21. Grails - 在控制器之间传递域类
- 22. durandal:在ViewModels之间传递数据的最佳方式
- 23. 在视图之间传递变量的最佳方式
- 24. 在Segmentation之间传递ViewController数据的最佳方式
- 25. 控制器之间传递的对象夫特
- 26. 在视图控制器之间传递对象的three20方法是什么?
- 27. 在视图控制器之间传递一个对象,该对象在新控制器中是否为空?
- 28. 如何将Model和json对象传递给控制器操作
- 29. 将对象传递给控制器操作
- 30. 在控制器之间传递数据