开发者

url mappings grails

right, basically we hav开发者_StackOverflowe a link into our system that is all lowercase but that needs to be camel cased. rather than get the other developers to fix this, I want to just make the problem go away by url magic

"/myobj/$action?/$id?"{ 
    controller: "myObj"        
}

what i am trying to do is map anything that references controller myobj to controller myObj instead, and keep the action and everything else the same. The above code gives an exception, saying the

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!

however the following works

 "/myobj/$action?/$id?"(controller: "myObj")

I dont understand, given the documentation. Why didnt the closure work? This is grails 1.2.0...


You should use

'/myobj/$action?/$id?' {
    controller = 'myObj'
}

Edit As a bit of explanation: the colon in the working example creates a map as described here (the working case is a Groovy function invocation with named parameters). Within the closure, you need to set the value of the controller property directly, i.e., using the equals sign.

This difference is demonstrated not specifically highlighted in the Grails URL mapping documentation.

Edit Here's an untested method that may yield case insensitive controller mappings... maybe.

'$myController/$action?/$id?' {
    grailsApplication.getArtefacts('Controller').find { it.name.toLowerCase() == myController.name.toLowerCase }.with { controller = it.name }
}

I'm assuming here (which I haven't verified) that the Grails application is available within the MappingCapturingClosure in the DefaultMappingUrlEvaluator.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜