【问题标题】:Grails controllers pass parametersGrails 控制器传递参数
【发布时间】: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

【问题讨论】:

    标签: grails params controllers


    【解决方案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 引入的一个概念。它是一个临时存储的属性,这些属性需要在这个请求和下一个请求中可用。之后属性被清除。这个对于在重定向之前直接设置消息很有用,例如“
      • 我的错,我忘记了它在重定向中仍然存在。
      猜你喜欢
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      相关资源
      最近更新 更多