Grails Reverse Url Mapping:有没有办法根据当前匹配的路由构建链接?

时间:2014-08-17 23:48:25

标签: grails reverse url-mapping

我正在尝试构建一些基于grails项目的域类的动态URL映射。目标是使用单个通用控制器,但URL决定使用哪个域进行处理。现在的问题是,在使用<g:link />标记时,我无法获得所需的网址。

我尝试了以下变体来创建URL映射:

static mappings = {
    Holders.grailsApplication.domainClasses.each { 
        "/admin/${it.propertyName}/$action?/$id?"(controller: "admin")
    }
}

static mappings = {
    "/admin/$domainClass/$action?/$id?"(controller: "admin")
}

两种变体都适用于实际的URL匹配。但我个人不喜欢grails反向URL映射的行为。对于变体1,反向映射始终解析为AdminController的最后添加的URL映射。对于案例2,我遇到的问题是,我必须将domainClass-Parameter传递给每个创建链接的调用,即使理论上没有必要,因为信息已经存在于当前请求中。

我知道有可能使用命名的URL映射,然后使用<g:link mapping="mapping_name" />之类的东西。问题是我正在使用一些通用的应用程序范围的部分视图,我尝试仅提供创建链接所需的信息,例如<g:link action="something" />

这导致了我的两个问题:

  1. 是否有可能获得g:link来根据当前请求中匹配的映射构建URL?
  2. 有没有办法获得与当前请求匹配的映射的引用,所以我可以自己实现所需的行为?

1 个答案:

答案 0 :(得分:1)

您可以定义像

这样的命名映射
Holders.grailsApplication.domainClasses.each { dc ->
  name((dc.propertyName):"/admin/${dc.propertyName}/$action?/$id?" {
    controller = "admin"
    domainClass = dc.propertyName
  })
}

使用params中保存的映射名称,您现在可以

<g:link mapping="${params.domainClass}">link text</g:link>