createLink
用途
创建一个任何地方都可以使用的链接 (例如 href, javascript, ajax 等的调用.)
示例
在 "shop"应用程序中的一个contrller:
class BookController {
def defaultAction="list"
def list = { [ books: Book.list( params ) ] }
def show = { [ book : Book.get( params['id'] ) ] }
}
controller的使用方法:
<g:createLink action="show" id="1" /> == /shop/book/show/1
<g:createLink action="show" params="[foo: 'bar', boo: 'far']"/> == /shop/book/show?foo=bar&boo=far
<g:createLink controller="book" /> == /shop/book
<g:createLink controller="book" action="list" /> == /shop/book/list
<g:createLink url="[action:'list',controller:'book']" /> == /shop/book/list
<g:createLink controller="book" absolute="true"/> == http://portal.mygreatsite.com/book
<g:createLink controller="book" base="http://admin.mygreatsite.com"/> == http://admin.mygreatsite.com/book
在 GSP 的使用方法:
<a href="${createLink(action:'list')}">my link</a>
结果:
<a href="/shop/book/list">my link</a>
描述
属性
action
(可选) -要链接action的名称, 如果不指定将链接到默认的 action
controller
(可选) - 要链接controller的名称, 如果不指定将链接到默认的 controller.
id
(可选) - link的id
params
(可选) - 包含请求参数的 map.
url
(可选) - 包含 action, controller, id 的map.
absolute
(可选) - 如果设为 "true" 带着 Config的grails.serverURL 的属性值链接到目标地址, 或http://localhost:<端口> 如果没值在Config中,将不工作.
base
(可选) - 加上前缀链接到目标地址, 通过为绝对的 URL地址. 如果两个都被指定,将覆盖 absolute属性的行为.
来源
Show Source
def createLink = { attrs ->
// prefer a URL attribute
def urlAttrs = attrs
if(attrs['url'] instanceof Map) {
urlAttrs = attrs.remove('url').clone()
}
else if(attrs['url']) {
urlAttrs = attrs.remove('url').toString()
} if(urlAttrs instanceof String) {
if(useJsessionId)
out << response.encodeURL(urlAttrs)
else
out << urlAttrs
}
else {
def controller = urlAttrs.containsKey("controller") ? urlAttrs.remove("controller") : controllerName
def action = urlAttrs.remove("action")
if(controller && !action) {
GrailsControllerClass controllerClass = grailsApplication.getArtefactByLogicalPropertyName(ControllerArtefactHandler.TYPE, controller)
String defaultAction = controllerClass?.getDefaultAction()
if(controllerClass?.hasProperty(defaultAction))
action = defaultAction
}
def id = urlAttrs.remove("id")
def frag = urlAttrs.remove('fragment')
def params = urlAttrs.params && urlAttrs.params instanceof Map ? urlAttrs.remove('params') : [:] if(request['flowExecutionKey']) {
params."execution" = request['flowExecutionKey']
} if(urlAttrs.event) {
params."_eventId" = urlAttrs.remove('event')
}
def url
if(id != null) params.id = id
def urlMappings = applicationContext.getBean("grailsUrlMappingsHolder")
def mapping = urlMappings.getReverseMapping(controller,action,params)
url = mapping.createURL(controller, action, params, request.characterEncoding, frag)
if (attrs.base != null) {
out << attrs.remove('base')
} else {
handleAbsolute(attrs)
}
if(useJsessionId)
out << response.encodeURL(url)
else
out << url
} }