【问题标题】:How to define multiple distinct controllers in Grails 2 filter?如何在 Grails 2 过滤器中定义多个不同的控制器?
【发布时间】:2012-02-15 00:12:58
【问题描述】:

是否可以在 Grails 2 Web 应用程序过滤器中定义多个不同的控制器?例如,类似:

def filters = {
    someFilterMethod(controller: 'controller1 controller2 ...', action: '*') {
        ...
    }
}

否则,有没有办法指定在过滤器中不包含主index.gsp?

【问题讨论】:

    标签: grails grails-filters


    【解决方案1】:

    使用管道符号:

    def filters = {
       someFilterMethod(controller: 'controller1|controller2|...', action: '*') {
          ...
       }
    }
    

    【讨论】:

    • @Burt Beckwith - 不,这很划算。把它留给伯特。顺便说一句,您的 Grails 教程已经多次提供了帮助 :)
    • 您将如何针对不同的操作执行此操作?即,Controller1 有动作 A,Controller2 有动作 b。
    【解决方案2】:

    如果您可以定义一个匹配 index.gsp 的规则,那么您可以通过添加 invert: true 来定义一个匹配除 index.gsp 之外的所有内容的规则。我想这样的事情应该这样做:

    def filters = {
        someFilterMethod(uri: '/', invert: 'true') {
    
        }
    }
    

    似乎以下内容也应该起作用:

    def filters = {
        someFilterMethod(uriExclude: '/') {
    
        }
    }
    

    您可以提供正则表达式而不是文字路径,因此如果您还需要排除“/index”,则只需将“/”替换为匹配“/”和“/index”的正则表达式.我的正则表达式技能生疏了,但应该这样做:

    def filters = {
        someFilterMethod(uriExclude: '/(index)?', regex: true) {
    
        }
    }
    

    警告

    我还没有测试过上面的任何代码,所以请谨慎购买!

    【讨论】:

      【解决方案3】:

      您可以在过滤器中包含逻辑,例如

      if (controllerName == "controller1" || controllerName == "controller2") {
       ...
      }
      

      【讨论】:

      • 当然你可以做到那个,我正在寻找一种更优雅的方式。
      • 是的,但是在像“(controller1|controller2)”这样的过滤器中处理多个控制器,意味着稍后您需要制作一个排除这些控制器的过滤器,这真的很混乱。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多