sortableColumn
用途
提供一排序列,用来在table里支持排序.
示例
<g:sortableColumn property="title" title="Title" />
<g:sortableColumn property="title" title="Title" style="width: 200px" />
<g:sortableColumn property="title" titleKey="book.title" />
<g:sortableColumn property="releaseDate" defaultOrder="desc" title="Release Date" />
<g:sortableColumn property="releaseDate" defaultOrder="desc" title="Release Date" titleKey="book.releaseDate" />
描述
属性 title
或 titleKey
是必需参数.当两个属性都被指定时, titleKey
优先执行, 解决信息源的问题. 万一消息不能被解决,title将被设为标题.
属性
property
- 关联域属性的名称
defaultOrder
(可选) - default order for the property; 可选参数为 asc (如果不提供,asc为默认的排序方式) 和 desc
title
(可选) - 列的标题
titleKey
(可选) - 列标题的key,解决消息源的问题.
params
(可选) - 包含请求参数的map
action
(可选) - 要链接action的名称, 如果不指定,链接到action列表
来源
Show Source
def sortableColumn = { attrs ->
def writer = out
if(!attrs.property)
throwTagError("Tag [sortableColumn] is missing required attribute [property]") if(!attrs.title && !attrs.titleKey)
throwTagError("Tag [sortableColumn] is missing required attribute [title] or [titleKey]") def property = attrs.remove("property")
def action = attrs.action ? attrs.remove("action") : (params.action ? params.action : "list") def defaultOrder = attrs.remove("defaultOrder")
if(defaultOrder != "desc") defaultOrder = "asc" // current sorting property and order
def sort = params.sort
def order = params.order // add sorting property and params to link params
def linkParams = [:]
if(params.id) linkParams.put("id",params.id)
if(attrs.params) linkParams.putAll(attrs.remove("params"))
linkParams.sort = property // determine and add sorting order for this column to link params
attrs.class = (attrs.class ? "${attrs.class} sortable" : "sortable")
if(property == sort) {
attrs.class = attrs.class + " sorted " + order
if(order == "asc") {
linkParams.order = "desc"
}
else {
linkParams.order = "asc"
}
}
else {
linkParams.order = defaultOrder
} // determine column title
def title = attrs.remove("title")
def titleKey = attrs.remove("titleKey")
if(titleKey) {
if(!title) title = titleKey
def messageSource = grailsAttributes.getApplicationContext().getBean("messageSource")
def locale = RCU.getLocale(request)
title = messageSource.getMessage(titleKey, null, title, locale)
} writer << "<th "
// process remaining attributes
attrs.each { k, v ->
writer << "${k}=\"${v.encodeAsHTML()}\" "
}
writer << ">${link(action:action, params:linkParams) { title }}</th>"
}