Grails 控制器传递参数
Posted
技术标签:
【中文标题】Grails 控制器传递参数【英文标题】:Grails controllers pass parameters 【发布时间】:2011-09-02 23:02:46 【问题描述】:我的控制器如下:
def participated =
def temp = ConferenceUser.get(params.temp)
def prizes = Prizes.findAllByConferenceUser(temp) // find all rooms where current computer is
def subms = Submissions.findAllByConferenceUser(temp) // find all rooms where current computer is
[temp: temp, priz: prizes, subm: subms]
但不知何故,当我成功更新会议值时,我想回到初始页面(参与)但我不知道如何传回params.temp
。 (如果我做一个简单的重定向,因为控制器期望 params.temp
,它会给我一个错误,因为我无法使用空对象作为参数搜索奖品。所以,想象我的更新控制器如下:
def update =
def saveParamshere = params.temp
...
...
(code here)
...
...
redirect(action: "participated", params: [temp: saveParamshere])
此代码无效。怎样才能成功回到我的主页并传入params.temp
?
【问题讨论】:
【参考方案1】:我认为问题可能是,您通过提交表单调用update
操作(我想)。也许您没有从该表单传递temp
值?您可以通过将temp
作为隐藏输入字段嵌入到表单中来做到这一点,或者通过表单标签上的param
属性将其应用于url。
使用隐藏字段可能是这样的(在您的视图文件中):
<g:form controller="somecontroller" action="update">
(...)
<g:hiddenField name="temp" value="$temp" />
(...)
</g:form>
使用params
属性:
<g:form controller="somecontroller" action="update" params="[temp : temp]">
(...)
</g:form>
我没有测试任何这些,因此可能存在一些问题,尤其是在第二种方法中。
【讨论】:
【参考方案2】:您可以将参数放在 flash 作用域中,该作用域适用于两个请求,或者将它们放在会话中并以这种方式检索它们。
这里是有关使用 flash 范围的 grails 文档的链接:
Grails - Controllers - Controller Scopes
【讨论】:
是的,flash 作用域适用于当前请求和下一个请求(即在重定向后仍然存在)。因此,在更新操作中执行 flash.temp = params.temp 应该意味着您可以在重定向操作中访问 flash.temp。 来自文档:“Flash 范围是 Rails 引入的一个概念。它是一个临时存储的属性,这些属性需要在这个请求和下一个请求中可用。之后属性被清除。这个对于在重定向之前直接设置消息很有用,例如“ 我的错,我忘记了它在重定向中仍然存在。以上是关于Grails 控制器传递参数的主要内容,如果未能解决你的问题,请参考以下文章