sortableColumn
Purpose
Renders a sortable column to support sorting in tables.Examples
<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" />
Description
Attribute title
or titleKey
is required. When both attributes are specified then titleKey
takes precedence, resulting in the title caption to be resolved against the message source. In case when the message could not be resolved, the title will be used as title caption.Attributes
property
- name of the property relating to the field
defaultOrder
(optional) - default order for the property; choose between asc (default if not provided) and desc
title
(optional) - title caption for the column
titleKey
(optional) - title key to use for the column, resolved against the message source
params
(optional) - a map containing request parameters
action
(optional) - the name of the action to use in the link, if not specified the list action will be linked
Source
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 = [sort:property]
if(params.id) linkParams.put("id",params.id)
if(attrs.params) linkParams.putAll(attrs.remove("params")) // determine and add sorting order for this column to link params
attrs.class = "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>"
}