url mappings grails

时间:2010-07-11 22:21:09

标签: grails

是的,基本上我们有一个链接到我们的系统全部小写,但需要骆驼。而不是让其他开发人员解决这个问题,我想通过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 ......

1 个答案:

答案 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中可用。