如何在 Grails 2 过滤器中定义多个不同的控制器?
Posted
技术标签:
【中文标题】如何在 Grails 2 过滤器中定义多个不同的控制器?【英文标题】:How to define multiple distinct controllers in Grails 2 filter? 【发布时间】:2012-02-15 00:12:58 【问题描述】:是否可以在 Grails 2 Web 应用程序过滤器中定义多个不同的控制器?例如,类似:
def filters =
someFilterMethod(controller: 'controller1 controller2 ...', action: '*')
...
否则,有没有办法指定在过滤器中不包含主index.gsp?
【问题讨论】:
【参考方案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)”这样的过滤器中处理多个控制器,意味着稍后您需要制作一个排除这些控制器的过滤器,这真的很混乱。以上是关于如何在 Grails 2 过滤器中定义多个不同的控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用域类字符串名称访问用户定义的 Grails 项目包名称