包中的Grails过滤器控制器

时间:2013-04-25 17:05:36

标签: grails

我正在处理的项目目前使用各种过滤器。过滤器本身效果很好。我遇到的问题是,当指定应该在哪些控制器上执行过滤器时,我最终得到一个非常大的列表。从功能上来说,这种方法很好但最终却很丑陋而且有点笨拙。

def filters =
{
        filterSomething(controller:'one|two|three|...|xyz', action:'*')
        {
            //before filter here, not important.
        }
    }

有没有办法指定过滤器仅适用于给定包或包列表中的控制器?

如果没有任何开箱即用的东西,我正在考虑将某些东西绑在引导程序中并以此方式设置我的列表。

1 个答案:

答案 0 :(得分:2)

您可以在所有控制器上安装过滤器,然后检查其包装,然后决定您要执行的操作。有更好,更优雅的方式编码,但只是为了给你一个想法。

 class MyFilters {
def grailsApplication


def filters = {
    all(controller:'*', action:'*') {
        before = {
            if (checkController(['com.package.name'],controllerName)){
            }
        }
    }
}


def searchInList(list,packageName){
    for (keyword in list) {
        if (packageName.contains(keyword)) return true
    }
    return false
}

Boolean checkController(def includePackageList,cname) {
    def dlist = grailsApplication.getArtefacts("Controller")
    def filteredList= dlist.findAll{ searchInList(includePackageList,it.getPackageName()) }
    return filteredList.contains(cname)
}
}