Grails在重定向

时间:2016-04-29 11:52:58

标签: flash grails

在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)?

4 个答案:

答案 0 :(得分:1)

“有一个插件!”

不幸的是旧的,但要么它仍然有效,或者您可以浏览源代码以获取灵感。它基于在会话中保存消息,如另一个答案所建议的那样。

One-Time Data plugin

答案 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"

然后,您将在需要的地方收到该消息。