Grails:当模型不存在时,在每个视图上向模型映射添加一个属性

Grails:当模型不存在时,在每个视图上向模型映射添加一个属性,grails,filter,Grails,Filter,我有一个非常干净的过滤器,旨在向模型映射添加一个属性,以便它可以显示在每个页面上: def filters = { someFilter(controller:'*', action:'*') { after = { Map model -> model.something = 'hey!' // can't, since it's null } } } 若模型为空,则会出现可怕的失败(NullPointerExcept

我有一个非常干净的过滤器,旨在向模型映射添加一个属性,以便它可以显示在每个页面上:

def filters = {
    someFilter(controller:'*', action:'*') {
        after = { Map model ->
          model.something = 'hey!' // can't, since it's null
        }
    }
}
若模型为空,则会出现可怕的失败(
NullPointerException
,如预期)。但是如果我添加一个
if(!model)
并尝试实例化它,它是本地的,不会按预期的方式运行


当model为null时,如何在那里放置一个空映射?

我认为您可以通过一些groovy trik来实现。您可以创建并将其应用于引导中的所有控制器类。拦截器实现afterInvoke方法,在该方法中,检查空结果并将其转换为空映射[:]

尝试以下操作:

def filters = {
someFilter(controller:'*', action:'*') {
    after = { Map model ->
      model.put('something', 'hey!')
    }
}

}

谢谢!我试试看。你会怎样概括控制器,这样你就能截获它,截获动作方法?看看她。您可以在控制器类上循环。对于操作,我认为您可以使用反射检查方法可见性。从理论上讲,在grails控制器中,只有操作需要是公共的,所以您可以拦截并仅应用于公共方法。如果模型为null,则此操作将失败:(