UrlMappings为控制器添加后缀

时间:2013-03-01 20:53:23

标签: grails

我正在尝试为url中指定的控制器添加后缀。

我想将/admin/mycontroller/映射到MyAdminController。

我尝试过很多变化而没有运气......有什么建议吗?

static mappings = {
    "/admin/$controller/$action?/$id?"{
        controller = controller.endsWith('Admin')?controller: (controller+'Admin')  
    }
}

2 个答案:

答案 0 :(得分:1)

我通过迭代控制器伪像并动态构建url贴图来完成此任务:

class UrlMappings {
    static mappings = {
        def adminControllers = ACH.grailsApplication.controllerClasses
        .findAll({ it.logicalPropertyName.endsWith('Admin')})
        .collect({ it.logicalPropertyName })

        adminControllers.each { controllerName ->
            def shortName = controllerName - 'Admin'
            "/admin/$shortName/$action?/$id?" (controller: controllerName)
        }
    }
 }

其中ACH是blog post Burt Beckwith中{{3}}所述的自定义ApplicationContextHolder

编辑:

这会创建网址结构,/admin/blah映射到BlahAdminController,但不包含/admin/blahAdmin

答案 1 :(得分:-1)

按照惯例,grails需要使用Controller

完成控制器类名称
  1. 我建议您将MyControllerAdmin重命名为MyAdminController

  2. 我认为,如果要对其进行强化,将网址中的变量命名为controller可能会有问题。 尝试类似:

    static mappings = {
        "/admin/$cName/$action?/$id?"{
            controller = cName.endsWith('Admin') ? cName : (cName + 'Admin')  
        }
    }
    
  3. UrlMappings中的订单问题,请检查其他规则是否会干扰此规则。