flash对象映射在grails框架内是如何工作的

flash对象映射在grails框架内是如何工作的,grails,grails-controller,Grails,Grails Controller,闪存,它是一个请求的临时存储映射 我想知道这是如何在grails上实现的 我特别感兴趣的是负责将flash映射放入请求中,然后在请求完成精细处理后将其取出的类 如果打印对象的类: class MyController { def index() { println flash.getClass().name } } 你会发现这是一个错误。如果查看代码,有两个ConcurrentHashMap:一个用于当前请求,另一个用于下一个请求 为了使其可用,实例存储在会话中(请参见regi

闪存,它是一个请求的临时存储映射

我想知道这是如何在grails上实现的


我特别感兴趣的是负责将flash映射放入请求中,然后在请求完成精细处理后将其取出的类

如果打印对象的类:

class MyController {
  def index() {
    println flash.getClass().name
  }
}
你会发现这是一个错误。如果查看代码,有两个ConcurrentHashMap:一个用于当前请求,另一个用于下一个请求


为了使其可用,实例存储在会话中(请参见registerWithSessionIfNecessary)。

闪存实际上只是当前请求和下一个请求的临时存储映射。它不会在下一个请求后保留条目,除非在下一个请求中重新填充条目(将来是最新的)。以下是它在Grails中的工作原理:

  • 扩展映射本身的接口有两个方法
    next()
    getNow()
    由实现。所有这些都可以在
    grailswebmvc
    中找到

  • 主要维护两个并发HasMap(一个用于当前请求,另一个用于下一个请求)来保存条目。它从
    FlashScope
    执行清洁和“仅限下一个请求”部分,如下所示:

    a。清除电流
    B将下一个设置为当前设置
    C下一步清除

  • 下一个重点将是(实现
    OncePerRequestFilter
    ),它确保每次调度都有一次请求执行

  • 所有http servlet请求都将按进行筛选。此过滤器将闪存范围设置为
    next
    ,以便每次检索到最新有效的信息时

  • 现在的问题是
    FlashScope
    如何协调当前和下一个映射?这就是为什么
    FlashScope
    Map
    扩展而来。FlashScope通过确保从
    next
    map检索到值,从map覆盖以协调两个映射,否则切换到当前映射

  • 默认情况下,
    控制器如何使用
    闪存
    ?所有控制器继承继承的控制器API


.

这门课是你要找的吗
org.codehaus.groovy.grails.web.servlet.GrailsFlashScope
答案中有没有可以接受的有用的答案?最后很好:-)