Grails控制器传递参数

时间:2011-05-26 21:11:11

标签: 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 where current computer is

  [temp: temp, priz: prizes, subm: subms]
}

但不知何故,当我成功更新会议价值时,我想回到初始页面(参与),但我不知道如何传回params.temp。 (如果我做一个简单的重定向,因为控制器期望params.temp,它会给我一个错误,因为我无法使用null对象作为参数搜索奖品。所以,想象一下我的更新控制器如下:

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

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

此代码无效。如何成功返回主页并传递params.temp

2 个答案:

答案 0 :(得分:7)

我认为问题可能是,您通过提交表单(我想)来调用update行动。也许您没有从该表单中传递temp值?您可以将temp作为隐藏的输入字段嵌入到表单中,或者通过表单标记上的param属性将其应用于网址。

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

<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>

我没有测试任何这些,所以可能存在一些问题,尤其是在第二种方法中。

答案 1 :(得分:2)

您可以将参数放在闪存范围内,该范围适用于两个请求,或者将它们放入会话中并以这种方式检索它们。

以下是关于flash范围使用的grails文档的链接:

Grails - Controllers - Controller Scopes