我正在尝试构建一些基于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" />
。
这导致了我的两个问题:
答案 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>