2017-03-07 36 views
0

我需要追加一个新的URL映射,Appender方法需要映射为Closure(而不是UrlMapping对象)。这里是封闭会是什么样如果手动声明:如何声明一个Closure作为函数参数

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 - Error initializing the application: No signature of method: java.lang.String.call() is applicable for argument types: (java.util.LinkedHashMap) values: [hapumTransactionAppointmentvacancyTagcandidate:/hapum/transactionappointmentvacancytagcandidate]]

Possible solutions: wait(), any(), wait(long), any(groovy.lang.Closure), take(int), each(groovy.lang.Closure)

我该如何解决这个问题?

回答

0

我不知道如果正确地理解你,但似乎你需要类似的东西:

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

现在我实现这一权利,虽然'名为“$ {NAME}”:'部分失踪。 – Gideon

相关问题