2015-06-26 49 views
1

Grails:我想要一些数据只存在于两个相应的重定向。如果我使用会话,只要用户的浏览器打开或有时会更长时间,它就会停留。如果我使用闪光灯,它将一直持续到下一个gsp文件被渲染。我的控制器A用一些数据重定向到另一个控制器B.数据被存储直到B的视图b.gsp被渲染。现在在b.gsp中,用户将填写某种形式并提交它,以便将另一个请求发送给B中的另一个动作。我希望来自A的数据保持到此时为止。 (两个请求正确吗?一个重定向和另一个提交)。如何让会话数据只保留两个请求

class AController { 

    def callBWithSomeData() { 

     redirect (controller: "B", action: "showB", params: [data: "id"]) 
    } 

    def backFromB() { 

     def myDataBack = params.persistingdDataForARoundTrip 
    } 
} 

class BController { 

    def showB() { 

     def data = params.data 

     render "b" 
    } 

    def fromBtoA() { 

     redirect (controller: "A", action: "backFromB", params: [persistingdDataForARoundTrip: "id"]) 
    } 
} 

好吧,你可能会说,为什么不把它放在会议和一次请求追溯到A.不过,如果什么用户去b.gsp清除该会话条目出于某种原因,浏览到一些其他页面不提交数据,在这种情况下会话数据未被清除。它留在系统中,并在我的应用程序中破坏了一些东西。

或者您可能会说,为什么不使用flash,在b.gsp中放置一个隐藏字段,并将值从A传递给flash,并在下一个请求中将其提交给B的第二个动作。但不是;假设由于某种原因,我无法访问b.gsp(B和b.gsp是完全独立系统的一部分)。我不能惹他们。

我尝试阅读关于grails中的web流量和子流,但我看不出有什么用处。我猜想Webflows在同一个控制器内工作(但我不确定)。

任何帮助?

感谢

+0

旅行,所以我不能发布一个完整的答案,但我觉得一个时间数据的插件会很好地工作适合你:https://开头的Grails。 org/plugin/one-time-data –

回答

0

考虑使用Grails chain。根据文档:

[链接]使用闪存存储隐式保留模型后HTTP从一个动作重定向到另一个。

,并可以用作:

def one() { 
    chain action: 'two', model: [name: 'Tony', town: 'Birmingham'] 
} 

def two() { 
    [name: 'Anthony', country: 'England'] 
} 
+0

看起来很有希望。我会尽力回复你 –

相关问题