0

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

这里的想法是使用短 url 列出用户的所有公共项目。它可以工作,但会破坏所有其他控制器。

static mappings = {

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

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

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

我怎样才能正确映射它?

4

3 回答 3

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')
}
于 2013-06-11T14:24:19.010 回答
0

您可能还可以在第一个 url 映射约束中排除用户和 usario 控制器(notEqual)

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

于 2013-06-07T01:39:33.580 回答
0

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

 "/users/$username" {
        controller = 'user'
        action = 'publicItens'
    }
于 2013-06-06T22:18:34.463 回答