P. 1
Display Tag Library 1.1

Display Tag Library 1.1

|Views: 856|Likes:
Publicado porlisandrocaballero

More info:

Published by: lisandrocaballero on Sep 21, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

12/14/2012

pdf

text

original

Display tag library 1.

1

A/C Jose Costa jose.costa@moove-it.com Ing. Martín Cabrera martin.cabrera@moove-it.com moove-iT

Motivación
Los custom tags simplifican el desarrollo y el mantenimiento de las JSP. Permiten entre otras funcionalidades:
realizar operaciones sobre objetos procesar formularios acceder bases de datos y otros servicios empresariales como e-mail y directorios realizar control de flujo

1 En la actualidad solo permite desplegar tablas Dada una lista de objetos permite crear una tabla donde se podrá ordenar por columnas. exportar en distintos formatos.Display tag Proyecto open source de custom tags Se encuentra en la versión 1. . decorar y otras funcionalidades. paginar.

setAttribute( "test".setAttribute( "test". new TestList(10. %> <display:table name="test" /> Especificando columnas: <% request. false) ). new TestList(10.Uso básico Sin especificar columnas: <% request. %> <display:table name="test"> <display:column property="id" title="ID" /> <display:column property="name" /> <display:column property="email" /> <display:column property="status" /> <display:column property="description" title="Comments"/> </display:table> . false) ).

getAttribute("testit_rowNum")%> </display:column> <display:column title=“Money”> <%=((ListObject)pageContext.getMoney()%> </display:column> </display:table> .getAttribute("testit")).Objetos implícitos <display:table name="test" id="testit"> <display:column property="id" title="ID" /> <display:column property="name" /> <display:column title="static value">static</display:column> <display:column title=“Row"> <%=pageContext.

Fuentes de datos Hasta ahora: <% request.setAttribute( "test". %> <display:table name="test"> Se puede definir el alcance del bean agregando alguno de los siguientes sufijos: pageScope requestScope (default) sessionScope applicationScope . new TestList( 10 ) ).

getItem(1) .item[1] Es equivalente a: session.list.getValue().getAttribute(“list”).attribute(name).Fuentes de datos También es posible acceder a las propiedades de un JavaBean con la sintaxis “.getAttribute(“name”).value.property” Las propiedades mapeadas se acceden especificando la clave entre () y las propiedades indexadas utilizando [] sessionScope.

.Tipos de datos soportados El custom tag <display:table> soporta los siguentes tipos de objetos: Collection Enumeration Map Dictionary Array Iterator cualquier Object con el método iterator() El resto de los objetos se despliegan en una sola fila.

etc. números. monedas.Decorators Un "decorator" es un patrón de diseño donde un objeto provee una capa de funcionalidad encapsulando o “decorando” otro objeto Utilizado comúnmente para controlar la forma en que se despliegan propiedades que no retornan un String nativo (fechas.) No es una buena práctica colocar la lógica del formateo dentro del propio objeto ..

sample. Tips: La clase Wrapper tiene que ser subclase de TableDecorator getCurrentRowObject() retorna el objeto correspondiente a la fila que se está evaluando.Table Decorator <display:table name="test" decorator="org. Antes de procesar una fila en particular.Wrapper" > <display:column property="id" title="ID" /> <display:column property="email" /> <display:column property="status" /> <display:column property="date" /> <display:column property="money" /> </display:table> Funcionamiento: Un único objeto decorator es creado antes de que el tag table comienze a iterar dentro de la lista. Las propiedades son llamadas sobre el decorator y si no se encuentran allí entonces se llaman directamente sobre el objeto original. .displaytag. le da el objeto de esa fila al decorator.

Column Decorator <display:table name="test"> <display:column property="id" title="ID" /> <display:column property="email" /> <display:column property="status" /> <display:column property="date"decorator= "org.LongDateWrapper" /> </display:table> .displaytag.sample.

Links Smart linking Si una columna tiene una dirección de e-mail o una URL a una web. se puede setear la propiedad autolink=“true” en el tag display:column. y automáticamente se convertirá en un link en la página. Dynamic links Al “estilo struts” Utilizando decorators .

Links al “estilo struts” Las columnas cuentan con 5 atributos similares a los de struts: href la URL base para construir el link paramId el nombre del parámetro que se agrega a la URL paramName nombre del bean del cual se quiere obtener una propiedad para obtener el valor del parámetro a agregar (tipicamente null para indicar que el bean se obtiene de la lista) paramProperty propiedad a invocar sobre el bean para obtener el valor paramScope alcance específico donde se encuentra el bean. tipicamente null .

Links utilizando decorators Los decorators también pueden ser utlizados para generar cualquier elemento HTML dentro de una columna. . tomando alguna propiedad de los elementos de la lista. En este caso podemos crear un String que contenga un link HTML.

cellpading) CSS Automáticamente se agregan clases css a las filas/celdas de la tabla Fácilmente puede customizarse el estilo cambiando la clase adecuada en la hoja de estilos asociada . class. cellspacing.Agregando estilos a las tablas Atributos HTML Dentro de los tags <display:table> y <display:column> puede utilizarse cualquier atributo estándar estricto de html (style.

Los formatos predefinidos son CSV. Excel.Exportando datos Seteando el atributo export=“true” aparecerá un footer con la posibilidad de exportar la tabla en diversos formatos. XML y PDF .

displaytag.displaytag.export.types =csv excel xml [miexport] ) .BinaryExportView Incluir si no existe el archivo display.export.Agregando otros formatos La nueva clase que se defina debe implementar alguna de las siguientes interfaces: org.properties en el classpath y agregar el nombre del nuevo tipo con los tipos ya existentes (export.TextExportView org.

[miexport]=true export.Agregando otros formatos En el archivo display.[miexport].[miexport].include_header=true # si se setea el siguiente parametro el archivo es bajado en vez de abrirse en la ventana del navegador export.[miexport].[miexport].class.label=Click aquí para probar este formato export view export.qualified.name export.class=fully.filename= .properties deberá incluirse: export.

se debe cambiar el content type retornado al browser No siempre es posible Ya se escribieron demasiados caracteres en el response. entonces el buffer se llenó y automáticamente se hizo flush sobre el response Algo antes del diplay:table hizo flush explícitamente de el response La página se incluye dinámicamente dentro de otra (Struts tiles) Cuando se exportan datos binarios que no son soportados por las jsps (pdf) .Filtro para la exportación Cuando se exporta en cualquier formato no-html.

Filtro para la exportación Podemos sacar provecho de los filtros para resolver el problema Displaytag viene con un filtro que en conjunto con el tag table durante la exportación. deshabilita la posibilidad de hacer flush sobre el response una vez que se requirió una exportación .

filter.Instalando el filtro En el web.xml <filter> <filter-name>ResponseOverrideFilter</filter-name> <filter-class> org.displaytag.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>ResponseOverrideFilter</filter-name> <url-pattern>*.ResponseOverrideFilter </filter-class> </filter> Agregar los mappings para las páginas que se van a interceptar <filter-mapping> <filter-name>ResponseOverrideFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> .

I18n .properties para cada lenguaje.properties .Internacionalización Displaytag soporta i18n para los textos utilizados para los cabezales de columnas y secciones de exportación y paginado Utilizando el archivo displaytag. Por ejemplo: displaytag_ES.properties podemos modificar los textos Para soportar varios lenguajes al mismo tiempo pueden agregarse archivos llamados displaytag_LANGUAGE.

Paginado y ordenamiento externo Por defecto displaytag trabaja con la lista completa de objetos y maneja de forma transparente el ordenamiento y el paginado A veces puede ser necesario encargarse del ordenamiento y el paginado uno mismo (lista parcial) .

PaginatedList El objeto puede pasarse como una lista común.displaytag.pagination. y se extraerá la información de paginado y ordenamiento de el Sin implementar la interfaz PaginatedList .Trabajar con listas parciales Utilizando el patrón Valuelist Requiere que el objeto que se pasa al displaytag implemente la interfaz org.

PaginatedList y no una colección Displaytag asume que la lista está ordenada y paginada externamente .pagination.displaytag.Patrón Valuelist Si el objeto pasado como una lista a displaytag es en realidad una instancia de org.

Sin implementar la interfaz PaginatedList Ordenamiento Externo <display:table name="testList" sort="external" defaultsort="1" id="element"> <display:column property="id" title="ID" sortable="true" sortName="id" /> <display:column property="firstName" sortable="true" sortName="firstName" title="First Name" /> <display:column property="lastName" sortable="true" sortName="lastName" title="Last Name" /> <display:column property="address" sortable="true" sortName="address" title="Email Address"/> </display:table> Ordenamiento Externo con Paginado <display:table name="testList" sort="external" defaultsort="1" pagesize="20" id="element" partialList="true" size="resultSize"> <display:column property="id" title="ID" sortable="true" sortName="id" /> <display:column property="firstName" sortable="true" sortName="firstName" title="First Name" /> <display:column property="lastName" sortable="true" sortName="lastName" title="Last Name" /> <display:column property="address" sortable="true" sortName="address" title="Email Address"/> </display:table> .

sourceforge.Referencias Display Tag Library Overview http://displaytag.net/ .

¿Preguntas? .

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->