在grails中,如果我这样做:
def someAction() {
//.......
flash.message = "some message"
[:]
}
然后在someAction.gsp中,它会显示flash消息。
但如果是这样的话:
def someAction() {
// ......
flash.message = "some message"
redirect uri: "${createLink(controller: 'someothercontroller', action: 'someotheraction')}"
}
然后在上面的例子中,someotheraction.gsp将没有flash.message。
我的问题是如何将flash.message
从someAction传递给someotheraction(可能在某些控制器或同一控制器中)。
我知道我可以执行类似params.flash = flash.message
的操作,而在另一个操作中使用此params.flash分配给flash.message
。但是,在这种方法中,我必须始终知道可能并非总是会发生的所有可能的重定向。
那么是否有一种更好的,也许是一种“标准”方式来保存Flash消息,直到最后一次重定向(最终呈现gsp)?
答案 0 :(得分:1)
答案 1 :(得分:1)
Grails在重定向之间保留闪存,这是一个例子:
class ExampleController {
def action1() {
flash.message = 'test'
redirect action: 'action2'
// or redirect uri: "${createLink(controller: 'example', action: 'action2')}" or any other ways
return
}
def action2() {
render text: flash.message
}
}
完美运作并在action2中呈现'test'
。也许你有几个重定向?在这种情况下,您应该在下次重定向之前重新定义Flash消息。
<强> UPD:强>
使用会话(简单但不防弹):
class ExampleController {
def action1() {
session.message = 'text'
redirect action: 'action2'
}
def action2() {
def msg = session?.message
session.message = ''
render text: msg
}
}
对于来自一个用户(session_id)的几个同步请求的更好的方法,但也不理想:
class ExampleController {
def action1() {
session.messages = (session.messages?:[]) + ['text']
redirect action: 'action2'
}
def action2() {
def msg = flash.messages?.get(0)
flash.messages?.remove(0)
render text: msg
}
}
这只是一个想法,也许你会发现session
的更好方法。
答案 2 :(得分:0)
尝试一下。
def someAction(){
flash.message = "some message"
redirect action: 'anotherAction'
}
def anotherAction() {
flash.message = flash.message
}
答案 3 :(得分:-1)
我尝试了一段时间,但你不能这样做,也许你应该在会话中保存消息,例如:
session.message = "your message"
然后,您将在需要的地方收到该消息。