Grails Url将路由映射到固定控制器和操作

时间:2013-06-06 21:04:02

标签: grails url-mapping

我在我的UrlMapping文件中制定了以下规则,现在我的所有控制器都与("/$username")映射匹配,而不是第一个("/$controller/$action?/$id?")。

这里的想法是使用短网址列出用户的所有公共项目。它有效,但它打破了所有其他控制器。

static mappings = {

    "/$controller/$action?/$id?"{
        constraints {
            // apply constraints here
        }
    }

    "/$username" {
        controller = 'user'
        action = 'publicItens'
    }

    "/"(controller:'usuario', action: 'index' )
    "500"(view:'/error')
}

如何正确映射?

3 个答案:

答案 0 :(得分:1)

解决!

我刚刚在UrlMappings中编写了一些代码,以便为应用程序中的每个控制器自动创建规则。当用户键入/ appname / controllerName时,使用此方法,则会考虑自动创建的规则来代替“$ / username”规则。

关键点是使用不推荐使用的ApplicationHolder。这可以修复编写自己的ApplicationHolder。

static mappings = {

    //creates one mapping rule for each controller in the application
    ApplicationHolder.application.controllerClasses*.logicalPropertyName.each { cName ->
        "/$cName" {
            controller = cName
        }
    }

    "/$controller/$action?/$id?"{
    }

    "/$username" {
        controller = 'usuario'
        action = 'itensPublicos'
    }

    "/"(controller:'usuario', action: 'index' )
    "500"(view:'/error')
}

答案 1 :(得分:0)

只需将/users/$username添加到网址映射即可。这是实现目标的最简单方法。

 "/users/$username" {
        controller = 'user'
        action = 'publicItens'
    }

答案 2 :(得分:0)

你也可以在第一个url映射约束中排除user和usario控制器(notEqual)

http://www.grails.org/doc/latest/ref/Constraints/notEqual.html