【问题标题】:How to declare a Closure to be used as a function parameter如何声明一个闭包作为函数参数
【发布时间】:2017-03-07 11:09:20
【问题描述】:

我需要根据需要附加一个新的 URL 映射,并且 appender 方法需要将映射作为 Closure(而不是 UrlMapping 对象)。下面是手动声明闭包的样子:

static mappings = {
    name logout: "/auth/logout"{
        action="signOut"
        controller="auth"
    }
}

所以我声明了一个Closure(我不知道它是否是正确的语法):

String name = "logout", url = "/auth/logout",
    action = "signOut", controller = "auth"

Closure mapping = { name "${name}" : "${url}" {
        action="${action}"
        controller="${controller}"
    }
}

并将其用于appender方法:

Holders.grailsApplication.mainContext
    .getBean("grailsUrlMappingsHolder").addMappings(mapping)

但它会抛出以下错误:

ERROR context.GrailsContextLoaderListener - 初始化应用程序时出错: 没有方法签名:java.lang.String.call() 适用于参数类型: (java.util.LinkedHashMap) 值:[hapumTransactionAppointmentvacancyTagcandidate:/hapum/transactionappointmentvacancytagcandidate]]

可能的解决方案:wait()、any()、wait(long)、any(groovy.lang.Closure)、take(int)、each(groovy.lang.Closure)

我该如何解决这个问题?

【问题讨论】:

    标签: grails groovy closures


    【解决方案1】:

    我不确定你是否理解正确,但似乎你需要这样的东西:

    String name = "logout", action = "signOut", controller = "auth"
    Closure mapping = { "/${name}"(controller: controller, action: action) }
    

    【讨论】:

    • 我现在正在实现这个,虽然name "${name}": 部分丢失了。
    猜你喜欢
    • 1970-01-01
    • 2015-10-02
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2019-11-28
    • 2012-01-19
    相关资源
    最近更新 更多