【问题标题】:Using Curry to Define Grails Tags使用 Curry 定义 Grails 标签
【发布时间】:2009-09-03 08:32:52
【问题描述】:

我有一个 grails 标签库 TpTagLib,我想在其中定义 4 个新标签,它们仅在一个常量值上有所不同,所以我尝试使用 curry。 但是有一个例外:groovy.lang.MissingPropertyException: No such property: attr for class: TpTagLib

有谁知道为什么会发生这个异常? 代码如下:

def ifPermsTag = { permissions, attr, body ->
    def user = attr?.user ?: session.userInstance
    if( !user ) return false
    if( !securityService.hasPermissions(user,permissions) ) return false
        out << body()
    return true
}


def canAdminRequestmaps = ifPermsTag.curry(Permission.CAN_ADMIN_REQUESTMAPS)
def canAdminCorporations = ifPermsTag.curry(Permission.CAN_ADMIN_CORPS)
def canAdminUsers = ifPermsTag.curry(Permission.CAN_ADMIN_USERS)    
def canAdminDevices = ifPermsTag.curry(Permission.CAN_ADMIN_DEVICES)    

【问题讨论】:

  • 有可以发布的堆栈跟踪吗?
  • 好吧,现在我觉得自己很笨。我再次尝试了相同的代码,只是从这个地方复制粘贴,它工作了。

标签: grails tags closures currying


【解决方案1】:

很酷的技术。您只需要将 ifPermsTag 设为私有,因此它不会被视为可用标记方法的候选对象:

private ifPermsTag = { permissions, attr, body ->
...
}

标签可以没有参数,也可以有“attr”参数,也可以有“attr”和“body”参数,但其他签名无效。

【讨论】:

  • 由于其他签名对标签无效,我实际上指望它不会被视为标签,但私有是确保这一点的好方法。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 2014-07-08
  • 2015-01-12
  • 1970-01-01
相关资源
最近更新 更多