【问题标题】:Grails flash scopeGrails 闪光范围
【发布时间】:2009-08-28 19:09:39
【问题描述】:

在我的 Grails 应用程序中,我有一个执行此操作的控制器操作:

def activeMember = {ConfirmSignUpCommand signupCommand ->

    flash.signupCommand = signupCommand
    render(view: "confirmPassword")
}

confirmPassword.gsp 上的表单提交后,将通过以下操作进行处理:

def validatePasswordConfirmation = {

    def password = params.password
    def command = flash.signupCommand
}        

但是,当我到达 validatePasswordConfirmation 操作时,闪存范围为空。我 100% 确定这两个控制器操作之间没有提交任何请求。我的闪光范围物体去哪儿了?

【问题讨论】:

  • 这很奇怪,你确定闪存范围确实是空的,它给出了一个未找到属性的错误吗?在 activeMember 操作中 signupCommand 永远不会为空?如果一切都失败了,请尝试清洁 grails。

标签: grails


【解决方案1】:

flash 对象可用于下一个请求,在您的场景中,即呈现 confirmPassword.gsp 页面(很多时候,它还用于通过重定向将对象传递到另一个控制器)。当 confirmPassword.gsp 页面提交时,这是另一个请求,并且您放置在 flash 中的对象会自动清除。

【讨论】:

  • 我认为处理activeMember 动作和渲染confirmPassword 视图都是同一个请求的一部分。猜我错了。当我只能使用模型时,我不明白为什么要使用 flash 范围将数据从动作传递到视图。所以我猜闪存范围只有在重定向后传递数据时才真正有用?
  • 我看到 flash 经常用于向视图传递消息或消息代码(即,事件 x 已保存)。这似乎是 flash 的常见用例以及用于转发/重定向的存储对象。
  • 你能想出什么特别的原因,为什么你可以使用 flash 作用域将消息传递给视图,而不是模型(或请求作用域)?我不能……
  • 我认为 flash 更适合用于有关控制器已采取的操作(保存、更新、删除等)的消息。在我看来,这在模型中是不合适的。您可以在 grails 生成的控制器/视图中看到用于消息传递的 flash。
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 2017-08-24
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多