是的,基本上我们有一个链接到我们的系统全部小写,但需要骆驼。而不是让其他开发人员解决这个问题,我想通过url magic来解决问题
"/myobj/$action?/$id?"{
controller: "myObj"
}
我要做的是将任何引用控制器myobj的内容映射到控制器myObj,并保持动作和其他所有内容相同。上面的代码给出了一个例外,说
2010-07-11 18:14:50,021 ERROR [default] - Servlet.service() for servlet default threw exception
java.lang.IllegalArgumentException: URL mapping must either provide a controller or view name to map to!
然而以下工作
"/myobj/$action?/$id?"(controller: "myObj")
鉴于文档,我不明白。为什么闭合不起作用?这是grails 1.2.0 ......
答案 0 :(得分:7)
你应该使用
'/myobj/$action?/$id?' {
controller = 'myObj'
}
修改强> 作为一点解释:工作示例中的冒号创建了一个映射,如here所述(工作案例是带有命名参数的Groovy函数调用)。在闭包内,您需要直接设置controller属性的值,即使用等号。
这种差异未经特别突出显示in the Grails URL mapping documentation。
修改强> 这是一个未经测试的方法,可能会产生不区分大小写的控制器映射......也许。
'$myController/$action?/$id?' {
grailsApplication.getArtefacts('Controller').find { it.name.toLowerCase() == myController.name.toLowerCase }.with { controller = it.name }
}
我假设这里(我还没有验证)Grails应用程序在the DefaultMappingUrlEvaluator中的MappingCapturingClosure中可用。