我正在从Grats版本2.4.4升级到3.2.8。我读到Grails 3引入了拦截器但是仍然支持过滤器。我想我想继续使用过滤器,因为我有一些广泛的过滤器。下面是一个片段,我基本上检查请求是什么,并设置变量以在视图布局gsp中使用。如何继续使用我创建的过滤器(如何注册此过滤器)或如何将以下内容转换为拦截器。
class AdminMenuFilters {
def ACTIVE_CLASS_NAME = "active"
def filters = {
admin(controller:'admin', action:'index') {
before = {
request.dashboardActive = ACTIVE_CLASS_NAME
}
}
layout(controller:'layout', action:'*'){
before = {
def layoutActive = false
switch(actionName){
case null :
layoutActive = true
break;
case "index" :
layoutActive = true
break;
case "tags" :
layoutActive = true
break;
case "how" :
layoutActive = true
break;
}
if(layoutActive){
request.layoutActive = ACTIVE_CLASS_NAME
}
}
}
}
}
提前感谢您的帮助。
答案 0 :(得分:0)
请参阅升级文档,您可以使用过滤器插件继续使用过滤器。 http://docs.grails.org/latest/guide/upgrading.html
答案 1 :(得分:0)
我找到了一个使用拦截器的解决方案。我需要为每个控制器而不是一个过滤器创建一个拦截器,然后使用正则表达式来捕获何时选择一个动作并设置我的活动变量。
使用布局控制器的示例
class LayoutActiveInterceptor{
LayoutActiveInterceptor(){
match(controller:"layout", action: ~/(index|tags|how)/)
}
boolean before() {
request.layoutActive = Constants.ACTIVE_CLASS_NAME
true
}
boolean after() { true }
void afterView() {
// no-op
}
}
老实说,我认为这是一个类文件足够的情况。任何关于如何注册过滤器的指导都是非常感谢的。在此先感谢您的帮助。