Groovy   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Grails过滤器语法,或者,如何在Grails外部调用Grails过滤器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Grails提供在控制器之前运行的 filters.它们在类看起来像这样定义:

class SecurityFilters {
   def filters = {
       myFilter(controller:'*',action:'*') { // what are those weird colons??
           print "I'm filtering!"
           // Code that does the filtering goes here
       }
   }
}

这些工作很好,但我想更好地理解语法,因为它看起来不像我以前见过的任何Groovy代码.特别是,以myFilter开头的上面的行似乎很奇怪.这是一个名为myFilter的方法方法定义吗?如果是这样,那么:“*”是指每个参数后的含义?我认为它可能是认参数值,但那将是=’*’.我之前在方法调用中看过使用冒号的命名参数,但这不是方法调用,因为我还没有在其他地方定义myFilter().

如果有人能告诉我如何从普通的Groovy类执行过滤代码,我想我会理解得更好.换句话说,如果我有一个包含上述行的@L_19_14@myFilters.groovy,我怎么能完成这个Groovy代码所以打印“我正在过滤”?

import MyFilters
def mf = new MyFilters()
mf.filters@L_113_16@methingGoesHere // Help! How do I finish this line so it calls my filtering code?

解决方法

以下Groovy代码将打印“我正在过滤!”:

class SecurityFilters {
   def filters = {
       myFilter(controller:'*',action:'*') { // what are those weird colons??
           print "I'm filtering!"
           // Code that does the filtering goes here
       }
   }   
}

class FilterDelegate {
    def methodMissing(String methodName,args) {
        // methodName == myFilter
        // args[0] == [controller:*,action:*]
        // args[1] == {print "I'm filtering!"}
        args[1].call()
    }
}

def sf = new SecurityFilters()
def filtersClosure = sf.filters
filtersClosure.delegate = new FilterDelegate()
filtersClosure.call()

在这个例子中,filters是一个闭包,它调用一个名为myFilter的方法并传递@L_25_3@map和一个闭包.您可以将myFilter视为:

@H_569_7@myFilter([controller:'*',action:'*'],closurE) @H_336_5@map可以包含控制器,动作或uri等键.当Grails尝试确定要调用哪个闭包时,尝试匹配http请求中的URI时使用通配符(*).

我对Grails如何处理过滤器的理解是使用了委托加载器类. loader类提供了methodMissing方法,并为filters关闭内的每个方法调用创建了一个FilterConfig.当发出http请求时,Grails会查看所有FilterConfig对象并尝试查找匹配的范围(在地图中查找控制器,操作或uri并使用正则表达式匹配通配符).如果找到匹配,则调用传递给Filter类中的方法的闭包.

大佬总结

以上是大佬教程为你收集整理的Grails过滤器语法,或者,如何在Grails外部调用Grails过滤器全部内容,希望文章能够帮你解决Grails过滤器语法,或者,如何在Grails外部调用Grails过滤器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。