加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Grails中,Flash存储对象只能从控制器和视图访问?

发布时间:2020-12-15 07:30:41 所属栏目:百科 来源:网络整理
导读:在Grails中, flash storage object用于持有 cross request data like messages. 我知道它可以从大多数视图和控制器访问,但我不知道它是否可以在Grails中普遍使用,或者只能从某些常规对象访问. 例如,可以从服务中访问Flash对象吗? 或者甚至在实时网络请求的
在Grails中,flash storage object用于持有 cross request data like messages.

我知道它可以从大多数视图和控制器访问,但我不知道它是否可以在Grails中普遍使用,或者只能从某些常规对象访问.

例如,可以从服务中访问Flash对象吗?

或者甚至在实时网络请求的任何地方?

在访问方面有什么精确的限制?

解决方法

无论何时何地,无论何时访问Web请求,您都可以访问Flash.一般来说,您可以从GrailsWebRequest对象获取闪存.

import org.codehaus.groovy.grails.web.util.WebUtils

def grailsWebRequest = WebUtils.retrieveGrailsWebRequest()
// request is the HttpServletRequest
def flash = grailsWebRequest.attributes.getFlashScope(request)

如果您在Web请求的上下文之外调用了retrieveGrailsWebRequest(),则会得到一个IllegalStateException. GrailsWebRequest通过过滤器GrailsWebRequestFilter绑定到当前线程,该过滤器在服务请求的早期执行.所以基本上,只要你在一个请求的上下文中,并且“内部”这个过滤器执行,你应该能够访问闪存.

除此之外,请查看org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes的源代码.闪存存储将保存在会话中,因此理论上您可以在访问会话后使用它.不过请小心,因为它在会话的不同请求之间共享.所提到的过滤器负责提高闪存在整个请求中的状态,从2元素队列基本上弹出一个ConcurrentHashMap.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读