Si usted no es sólo a partir de Grails con aplicaciones Web basadas en Java, JSP emplea la espera Taglib DisplayTag ser un término.
DisplayTag sin grandes mesas tire en Java Server Pages de dividir varias páginas (paginación), una especie de, al grupo y, CSV, XML y la exportación de PDF a Excel.
Grails contó con el apoyo "de la caja" sólo de paginación y la hora larga que no usamos JSP Tag libs en Grails, de modo que se podría asignar el resto de funciones ya sea a través de plugins o incluso tuvo que darle una mano.
Desde Grails 1.1 Esta restricción se levantó y ahora los dos se unen la prueba ha sido completada con éxito. Sólo la entrada de blog sobre él es ya que el sigue en mi lista de tareas pendientes. Pero, ¿qué vendrá a quienes hacen el bien (espero
).
Los siguientes pasos son necesarios para integrar DisplayTag en Grails:
libs
En primer lugar, las bibliotecas son DisplayTag junto a los controladores de base de datos copiados en el directorio lib.

DisplayTag archivo de configuración
El archivo de configuración de DisplayTag displaytag.properties debe ser inferior a src/java que se creará. La estructura de este archivo está en el documento DisplayTag descrito. Por mi Grum proyecto es la configuración de esta manera:
1
2
3
4
5
6
7:00
8
9
10
11
12
13
14
15
16
17
18
19
| csv excel xml pdf la exportación. csv excel pdf tipos xml =
true la exportación. excel = true
true la exportación. csv = true
true la exportación. xml = true
true la exportación. pdf = true
= org. displaytag . export . excel . DefaultHssfExportView la exportación. excel. org = clase. DisplayTag. exportación. excel. DefaultHssfExportView
= org. displaytag . export . DefaultPdfExportView de exportación de clase .. pdf = org. DisplayTag. exportación. DefaultPdfExportView
= org. displaytag . export . DefaultRtfExportView la exportación. rtf. org = clase. DisplayTag. exportación. DefaultRtfExportView
div class = "exportlinks" > Export to : { 0 } </ div > la exportación. banner = class = <div "export left"> Exportar a: (0) </ div>
list la exportación. = cantidad lista
= bottom paginación. banner. = fondo de colocación
= No data found. de base. msg. empty_list = No se han encontrado datos.
. empty_list_row =< tr class = "empty" >< td colspan = "0" > No data found. </ td ></ tr ></ tr > de base. msg. empty_list_row = class = <tr <td colspan = "empty"> "0"> No hay datos. </ td> </ tr> </ tr>
=< span class = "pagelinks" >< a href = "{1}" >< strong >& lt ;& lt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{2}" >< strong >& lt ;</ strong ></ a >& nbsp ; { 0 } & nbsp ;< a href = "{3}" >< strong >& gt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{4}" >< strong >& gt ;& gt ;</ strong ></ a ></ span > paginación. banner. <span completa = class = "pagelink"> <a href = "(1)"> <strong> & lt; & lt; </ strong> </ a> & nbsp; & nbsp; & nbsp; <a href = "(2)"> <strong> & lt; / strong> </ a> & nbsp; (0) & nbsp; <a href = "(3)"> <strong> & gt <, < / strong> </ a> & nbsp; & nbsp; & nbsp; <a = "(4)"> <strong> & gt href; & gt; </ strong> </ a> </ span>
=< span class = "pagelinks" > { 0 } & nbsp ;< a href = "{3}" >< strong >& gt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{4}" >< strong >& gt ;& gt ;</ strong ></ a ></ span > paginación. banner. <span primera clase = = "pagelink"> (0) & nbsp; <a href = "(3)"> <strong> &; <gt / strong> </ a> & nbsp; & nbsp; & nbsp; <a href = "(4)"> <strong> & gt; & gt; </> </ strong> </ span>
=< span class = "pagelinks" >< a href = "{1}" >< strong >& lt ;& lt ;</ strong ></ a >& nbsp ;& nbsp ;& nbsp ;< a href = "{2}" >< strong >& lt ;</ strong ></ a >& nbsp ; { 0 } </ span > banner pasado. <span = clase. paginación = "pagelink"> <a href = "(1)"> <strong> & lt; & lt; </ strong> </ a> & nbsp; & nbsp; & nbsp; <a href = "(2)"> <strong> & lt; </ strong> </ a> & nbsp; (0) </ span>
=< span class = "pagebanner" > 1 Record found. Seite : </ span > paginación. banner. one_item_found = <span class = "pagebanner"> 1 resultado. Página: </ span>
=< span class = "pagebanner" > { 0 } Records found. Seite : </ span > paginación. banner. all_items_found = class = <span "pagebanner"> (0) encontrados. Página: </ span>
=< span class = "pagebanner" > { 0 } Records found, show { 2 } - { 3 } . </ span >< br />< br /> paginación. banner. some_items_found = class = <span "pagebanner"> (0) registros encontrados, se muestran (2) - (3). </ span> <br /> <br /> |
DisplayTag contenedor
Enlaces compartidas y el formato se apliquen por DisplayTag Patrón Decorador. El decorador es una clase contenedora a cabo en el curso en que está escrito en Grails Groovy. Mi aplicación es la clase DisplaytagWrapper , el proyecto Grum un enlace a los datos del usuario creado en el formato y fecha de creación.
1
2
3
4
5
6
7:00
8
9
10
11
12
13
14
| paquete de.koo.grum.groovy.util
; org.displaytag.decorator.TableDecorator importación;
TableDecorator { clase pública se extiende DisplaytagWrapper TableDecorator (
String GetLinkToUser () (
getCurrentRowObject definición de usuario = ()
/grum/user/show/${user.id} \" >${user.username}</a>" ; retorno "<a href= \" /grum/user/show/${user.id} \"> $ (user.username) </ a>";
)
String GetUserCreatedAt () (
getCurrentRowObject definición de usuario = ()
. format ( "dd.MM.yyyy HH:mm" ) ; CreateDate retorno de usuario .. formato ("dd.mm.aaaa HH: mm");
)
) |
Exportación de filtros
fijar la hora de exportar a un formato HTML, el tipo de contenido para la respuesta al navegador. Para que esto no da lugar a problemas, uno debe filtrar en el archivo web.xml se puede definir, para contrarrestar los posibles errores. DisplayTag trae la clase ResponseOverrideFilter ya una implementación para con él.
Para Grails cambios en el web.xml para hacer, necesita las plantillas están instalados:
griales instalar las plantillas
Luego está el web.xml en el directorio src/templates/war . Para el filtro, las entradas son necesarios los siguientes.
1
2
3
4
5
6
7:00
8
| <filter>
<filter-name> ResponseOverrideFilter </ nombre de filtro->
org.displaytag.filter.ResponseOverrideFilter <<filter-class> / clase> Filtro
</> Filtro
<filter-mapping>
<filter-name> ResponseOverrideFilter </ nombre de filtro->
<url-pattern> / <* /-patrón url>
</ Filtro-mapping> |
Participación en la página Servidor Groovy
Si ha realizado todos estos pasos de preparación, usted puede finalmente llegar a utilizar en una página DisplayTag Groovy Server.
En mi ejemplo, el usuario / list.gsp los datos del usuario se visualizan todos de una tabla. La tabla es el atributo sortable por nombre y apellido hace ordenable (sin acceso a un nueva base de datos) y se alcanza cuando el pagesize del atributo partialList distribuidos en varias páginas.
1
2
3
4
5
6
7:00
8
9
10
11
12
13
| = "display" % > <% @ Taglib uri = "http://displaytag.sf.net" prefix = "display"%>
<html>
..
defaultsort = "1" partialList = "true" > Mostrar: nombre de la tabla = "lista de usuarios" DefaultSort = "1" partialList = "true"
decorador = "de.koo.grum.groovy.util.DisplaytagWrapper"
= "${pageSize}" requestURI = "/grum/user/list" size = "$ (ResultSize)" PageSize = "$ (pageSize)" requestURI = "/ Grum / user / list"
= "0" cellspacing = "0" sort = "list" > class = "lista" cellpadding = "0" cellspacing = "0" sort = "lista">
title = "Userame" /> propiedad <display:column = "linkToUser" title = "Userame" />
title = "Firstame" sortable = "true" /> propiedad <display:column = "firstname" title = = "Firstame" ordenable "true" />
title = "Lastname" sortable = "true" /> propiedad <display:column = "lastname" title = = "Lastname" ordenable "true" />
title = "Created At" sortable = "true" /> propiedad <display:column = "userCreatedAt" title = "Created At" ordenable = /> "true"
</ Pantalla: table>
... |
Este conjunto de características adicionales ( export , group ) puede, como en el ejemplo datos de contacto / list.gsp también la exportación a diferentes formatos de salida y un grupo de entradas que se alcancen.
1
2
3
4
5
6
7:00
8
9
10
11
12
13
14
| export = "true" defaultsort = "1" partialList = "true" > Mostrar: nombre de la tabla = "contactDataList" exportación = "true" DefaultSort = "1" partialList = "true"
decorador = "de.koo.grum.groovy.util.DisplaytagWrapper"
= "${pageSize}" requestURI = "/grum/contactData/list" size = "$ (ResultSize)" PageSize = "$ (pageSize)" requestURI = "/ Grum / datos de contacto / list"
= "0" cellspacing = "0" sort = "list" > class = "lista" cellpadding = "0" cellspacing = "0" sort = "lista">
value = "contactData.csv" /> nombre = valor = <display:setProperty "export.csv.filename" "contactData.csv" />
value = "contactData.xls" /> nombre = valor = <display:setProperty "export.excel.filename" "contactData.xls" />
value = "contactData.xml" /> nombre = valor = <display:setProperty "export.xml.filename" "contactData.xml" />
value = "contactData.pdf" /> nombre = valor = <display:setProperty "export.pdf.filename" "contactData.pdf" />
value = "list" /> nombre = valor = <display:setProperty "export.amount" "list" />
title = "Name" sortable = "true" group = "1" /> propiedad <display:column = "linkContactDataToUser" title = "Name" ordenable grupo "true" = = "1" />
title = "type" sortable = "true" /> propiedad <display:column = "type" title = "type" "true" /> = ordenable
sortable = "true" /> propiedad <display:column = = "data" ordenable "true" />
</ Pantalla: table> |
Conclusión:
Una vez configurado DisplayTag una de las grandes soluciones para aplicaciones Web basadas en Java a los datos de tabla de la lista. La funcionalidad de este supera con creces la funcionalidad estándar de Grails. La combinación de Grails y DisplayTag lo tanto, puedo recomendar a nadie.
Enlaces:
Grum Fuente
artículos similares: Publicado por gklinkmann \ \ tags: Grails , groovy , Java , Open Source