flash对象映射在grails框架内是如何工作的
闪存,它是一个请求的临时存储映射 我想知道这是如何在grails上实现的flash对象映射在grails框架内是如何工作的,grails,grails-controller,Grails,Grails Controller,闪存,它是一个请求的临时存储映射 我想知道这是如何在grails上实现的 我特别感兴趣的是负责将flash映射放入请求中,然后在请求完成精细处理后将其取出的类 如果打印对象的类: class MyController { def index() { println flash.getClass().name } } 你会发现这是一个错误。如果查看代码,有两个ConcurrentHashMap:一个用于当前请求,另一个用于下一个请求 为了使其可用,实例存储在会话中(请参见regi
我特别感兴趣的是负责将flash映射放入请求中,然后在请求完成精细处理后将其取出的类 如果打印对象的类:
class MyController {
def index() {
println flash.getClass().name
}
}
你会发现这是一个错误。如果查看代码,有两个ConcurrentHashMap:一个用于当前请求,另一个用于下一个请求
为了使其可用,实例存储在会话中(请参见registerWithSessionIfNecessary)。闪存实际上只是当前请求和下一个请求的临时存储映射。它不会在下一个请求后保留条目,除非在下一个请求中重新填充条目(将来是最新的)。以下是它在Grails中的工作原理:
- 扩展映射本身的接口有两个方法
和next()
由实现。所有这些都可以在getNow()
中找到grailswebmvc
- 主要维护两个并发HasMap(一个用于当前请求,另一个用于下一个请求)来保存条目。它从
执行清洁和“仅限下一个请求”部分,如下所示: a。清除电流FlashScope
B将下一个设置为当前设置
C下一步清除 - 下一个重点将是(实现
),它确保每次调度都有一次请求执行OncePerRequestFilter
- 所有http servlet请求都将按进行筛选。此过滤器将闪存范围设置为
,以便每次检索到最新有效的信息时next
- 现在的问题是
如何协调当前和下一个映射?这就是为什么FlashScope
从FlashScope
扩展而来。FlashScope通过确保从Map
map检索到值,从map覆盖以协调两个映射,否则切换到当前映射next
- 默认情况下,
控制器如何使用
?所有控制器继承继承的控制器API闪存
.这门课是你要找的吗
org.codehaus.groovy.grails.web.servlet.GrailsFlashScope
答案中有没有可以接受的有用的答案?最后很好:-)