Si lo que necesitamos es reutilizar código, Grails nos lo facilita con los TagLibs (Librerias de etiquetas)
Por
ejemplo: si lo que se quiere es crear un TexBox con unas
caracteristicas determinadas el cual usar en muchas vistas podemos crear
un taglib el cual lo defina; de esta manera si se realizan
modificaciones solo habrá que realizarlas en un solo sitio.
Crear TagLib
Botón derecho sobre la carpeta Tag Libraries -> New -> Grails Tag Library... proporcionamos un nombre ej. Controls y esto generará un archivo ControlsTagLib.groovy ahora solo hay que añadir el código del TexBox
class ControlsTagLib {
static namespace = 'controls'
/**
* - size: Para forzar un ancho (HTML) concreto
* - id: el id del <input>
* - value: el valor que tedrá el <input>
* - click: código javascript que se ejecutará al hacer click
*/
def textBox = { attrs ->
def size = getOptionalAttribute(attrs, "size")
def id = getOptionalAttribute(attrs, "id")
def value = getOptionalAttribute(attrs, "value")
def click = getOptionalAttribute(attrs, "click")
def className = getOptionalAttribute(attrs, "class")
// Otros Atributos
def extraAttrs = ""
attrs.each{k,v ->
extraAttrs += "${k}=\"${v.encodeAsHTML()}\" "
}
out << """
<input onclick=\"selectTextInput('${id}'); ${click}\"
id=\"${id}\" type=\"text\" size=\"${size ? size : "10"}\"
value=\"${value}\" class=\"elemsFilterForm ${className}\"
${extraAttrs}>
"""
}
protected getRequiredAttribute(attrs, String name, String tagName) {
if (!attrs.containsKey(name)) {
throwTagError("Tag [$tagName] is missing required attribute [$name]")
}
attrs.remove name
}
protected getOptionalAttribute(attrs, String name) {
def ret = attrs.remove(name)
if(!ret || ret.equals("")){
ret = ""
}
return ret
}
}
Para utilizar el taglib desde una vista
<controls:textBox id="username" name="username" value="${userInstance.username}" size="20"/>
No hay comentarios:
Publicar un comentario