2009-08-27 36 views
2

在我的Grails应用程序我有一个控制器的动作,做这个: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%确定在这两个控制器操作之间没有提交任何请求。我的闪光范围对象在哪里去了?

+0

这是奇怪的,你确定闪光范围确实是空的,它给一个属性找不到错误? activeMember操作中的signupCommand从不为空? 如果一切都失败,请尝试grails清理。 – 2009-08-28 10:40:23

回答

6

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

+0

我认为处理'activeMember'动作和呈现'confirmPassword'视图都是同一请求的一部分。猜猜我错了。我不明白为什么我会使用flash范围将数据从动作传递到视图,因为我只能使用该模型。所以我想闪光范围只有在重定向后传递数据时才有用? – 2009-08-28 13:37:26

+1

我看到经常使用闪光灯将消息或消息代码传递到视图(即事件x已保存)。这似乎是闪存的常见用例,以及用于前向/重定向的存储对象。 – 2009-08-28 15:07:51

+1

你能想出为什么你可以使用flash范围传递消息给视图而不是模型(或请求范围)的任何特定原因吗?我不能...... – 2009-08-28 15:15:05