Grails控制器传递参数

Grails控制器传递参数,grails,params,controllers,Grails,Params,Controllers,我的控制器如下所示: 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 wh

我的控制器如下所示:

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]
}
但不知何故,当我成功更新会议值时,我想返回初始页面(参与),但我不知道如何传回
参数temp
。(如果我做一个简单的重定向,因为控制器需要
params.temp
,它会给我一个错误,因为我不能用空对象作为参数搜索奖品。因此,假设我的更新控制器如下所示:

def update = {
  def saveParamshere = params.temp
  ...
  ...
  (code here)
  ...
  ...

  redirect(action: "participated", params: [temp: saveParamshere])
}

此代码不起作用。我如何才能成功返回主页并传入
params.temp

您可以将这些参数放入flash作用域,该作用域可用于两个请求,或者将它们放入会话并以这种方式检索它们

以下是有关flash scope使用的grails文档的链接:


我认为问题可能在于,您正在通过提交表单(我想)调用
update
操作。可能您没有从该表单传递
temp
值?您可以通过将
temp
作为隐藏输入字段嵌入表单,或者通过表单标签上的
param
属性将其应用于url

使用隐藏字段可能是这样的(在视图文件中):


我没有对其中任何一个进行测试,因此可能会出现一些问题,特别是在第二种方法中。

是的,flash scope适用于当前请求和下一个请求(即,在重定向中生存)。因此,在更新操作中执行flash.temp=params.temp意味着您可以在重定向操作中访问flash.temp。从文档:Flash scope是Rails引入的一个概念。它是一个临时存储区,用于存储只需用于此请求和下一个请求的属性。之后,属性被清除。这对于在重定向之前直接设置消息非常有用,例如“我的坏消息,我忘了它在重定向后仍然有效”。
<g:form controller="somecontroller" action="update">
  (...)
  <g:hiddenField name="temp" value="${temp}" />
  (...)
</g:form>
<g:form controller="somecontroller" action="update" params="[temp : temp]">
  (...)
</g:form>