使用用户名自定义URL映射Grails

时间:2014-04-04 14:56:23

标签: grails username url-mapping

我在Grails中使用Url的映射存在问题。

我有一个用户的应用程序,我用这个网址显示他们的个人资料:

/user/myProfile/2 (2 is the user's id)

但我想要显示用户个人资料的网址是:

/user/angelo087 (angelo087 is the username of the a user with id=2)

我为用户使用插件“spring-security-core2.0-RC2”。

我试过但我不知道这是怎么回事。问题是我不知道如何在UrlMappings.groovy中获取用户的ID来制作网址。

有任何帮助吗? =(

[编辑:解决方案]

最后,我知道如何将用户名放在网址中:

UrlMapping.groovy我写道:

"/user/$username" {
      controller="user"
      action = "myProfile"
}

之后,在UserController.groovy我写道:

def myProfile() {
    def username = params.username
    def usuario = User.findByUsername(username.toString())
    [personaInstance: usuario.persona, usuarioInstance: usuario]
}

问题是我不知道在URL中你可以放置数组params的其他变量。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用urlMapping:

"/user/$id"(controller:"user", action:"myProfile")

然后在你的控制器中:

def user
if (id.isNumber()) {
    user = User.get(id)
} else {
    user = User.findByUsername(id)
}

这是一个猜测,因为您还没有包含您的urlMapping或控制器代码。

此外,采用此路由意味着可以命中和错过调用该控制器中的其他方法,因为id和方法名称无法区分。您可以通过在上面的条目上方的urlMappings.groovy中定义其他方法来解决这个问题。通常更容易在URL路径中包含操作名称。