我有一个当前定义为在呈现视图后运行的过滤器:
class MyFilter {
def filters = {
doStuff(controller: '*', action: '*') {
before = {...}
after = {...}
afterView = {
// code I want to run when EVERYTHING is set and done }
Holder.setCurrentData(null)
}
}
}
这应该可行,但我注意到<g:message />
标签(可能还有其他标签;这是我此时感兴趣的标签)在afterView
过滤器之后执行。
这是一个问题,因为我使用此过滤器来跟踪 ThreadLocal 中当前执行的一些信息,并且我想确保在请求完成后自己进行清理。我不想使用请求/会话对象来打乱数据,因为我必须将它传递给我所做的所有调用;事实上,我有一个 Holder 类,我可以在 ThreadLocal 中查询值。
我需要自定义 MessageSource 中来自该 ThreadLocal 的信息。这就是我注意到在过滤器<g:message />
之后调用的方式。afterView