Post on 23-Jan-2016
GENERIC TAGSCURSO STRUTS 2
En el siguiente apartado del curso se mostrará el grupo de Tags Generic de Struts 2, realizando una revisión de cada una de ellas.
La información que se estudiará en este apartado es:
•¿Qué son las Generic Tags?
•Tipos de Generic Tags
•Control Tags
•Data Tags
GENERIC TAGSCURSO STRUTS 2
¿QUÉ SON LAS GENERIC TAGS ?
Las Generic Tags de Struts 2 es una librería de etiquetas, que son utilizadas para el control de las páginas cuando la Vista es procesada, permitiendo labores de procesamiento sobre los datos.
Uso de las Generic TagsPara poder utilizar las Generic Tags de Struts 2 sólo hay que invocar a la siguiente directiva:<%@ taglib prexif=”s” uri=”/struts-tags”%>
Para cualquier parámetro de los tags se pueden asignar distintos valores: valor estático o expresión OGNL. Para que se evalúen el valor del atributo del tag, como una expresión OGNL es necesario que el valor esté delimitado por la sintaxis de OGNL, %{ }.. . . test=”usuario” . . . //test= varlo fijo “usuario”. . . test=”%{usuario}” . . . //test= valor OGNL “usuario” (dinámico). . . test=”%{#session.usuario}” . . . //test= valor OGNL “#session.usuario”. . . test=”%{5 + 5}” . . . //test= valor OGNL igual a 10
Generic Tags VS UI TagsLa mayor diferencia entre las generic tags y las UI tags es, que las generic tags devuelven la respuesta directamente, mientras que las UI tags utilizan plantillas (templates) para representar su respuesta en función del theme seleccionado.
GENERIC TAGSCURSO STRUTS 2
TIPOS DE GENERIC TAGS
Las generic tags se pueden dividir en dos grupos en función de su objetivo:
Control Tags Data Tags.
Data TagsLas data tags se utiliza para manipular o crear datos, como los bean o mensajes i18n
Ejemplo<s:include value="/jsp/cabecera.jsp"/><s:include value="/jsp/principal.jsp">
<s:param name="param1" value="value2"/>
<s:param name="param2" value="value2"/> </s:include><s:include value="/jsp/pie.jsp"/>
Control TagsLas control tags son utilizadas para controlar el flujo en la Vista, como las sentencias if ... else.
Ejemplo<s:if test="#parameters.numero == 1">
Has elegido 1</s:if><s:elseIf test="#parameters.numero == 2">
Has elegido 2</s:elseIf>
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Las control tags son utilizadas para controlar el flujo en la Vista, como las sentencias if ... else.
La lista de control tags es:• append• else• elseIf• generator• if• iterator• merge• sort• subset
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Tags if, elseIf y elseEstos tres tags se utilizan para formular sentencias condicionales, funcionando de la misma forma que en Java. Los tags if y elseIf requieren de un atributo, mientras que el tag else no tiene ningún atributo.
Atributos
Atributo Tipo Dato Valor Defecto Descripción
test* Boolean Sentencia condicional
Ejemplo<s:if test="#parameters.numero == 1">
Has elegido 1</s:if><s:elseIf test="#parameters.numero == 2">
Has elegido 2</s:elseIf><s:else>
Has elegido otro número distinto a 1 y 2</s:else>
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Tag appendEste tag se utiliza para concatenar iterators respetando el orden de los elementos de las listas y el orden e las propias listas.
Atributos
Ejemplo<s:append var="listaCompleta">
<s:param value="#lista1"><s:param value="#lista2">
</s:appen>
Atributo Tipo Dato Valor Defecto Descripción
var String La variable que se creará que referencia el objeto iterator concatenado.
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Tag mergeEl tag merge une listas para crear una lista que contenga todos los elmentos. El orden el que se añaden los elementos es alterno, se lee un elemento de cada lista en sucesión.
Atributos
Ejemplo<s:merge var="listaCompleta">
<s:param value="#lista1"><s:param value="#lista2">
</s:merge>
Atributo Tipo Dato Valor Defecto Descripción
var String La variable que se creará que referencia el objeto iterator concatenado.
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Tag iteratorEste tag permite recorrer los datos de un array, Collection o un Map, y para cada uno de los elementos del objeto iterable lo almacena en el Value Stack
Atributos
Ejemplo<table>
<s:iterator value="paises" status="status"><s:if test="#status.odd">
<tr class="parRow"></s:if><s:if test="#status.even">
<tr class="imparRow"></s:if>
<td><s:property value="id"/>
</td><td>
<s:property value="nombre"/>
</td></tr>
</s:iterator></table>
Atributo Tipo Dato Valor Defecto Descripción
value String El objeto iterable a mostrar sus datos
status IteratorStatus asignar a una variable que apunte al objeto IteratorStatus
var String Nombre de referencia del elemento actual del objeto iterable.
El objeto IteratorStatus que se obtiene del atributo “status” dispone de los siguientes atributos, que pueden ser útiles en la representación de datos en la bucle.
Propiedad Tipo Dato Descripción
index Integer El índice de la iteración, comenzando en 0
count Integer La iteración actual index + 1
first Boolean Indica si el elemento actual es el primero del objeto iterable
last Boolean Indica si el elemento actual es el último del objeto iterable
even Boolean Indica si el número (count) del elemento actual es par
odd Boolean Indica si el número (count) del elemento actual es impar
modulus Integer Este método toma un Integer y devuelve el módulo del contador
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Tag generatorEsta tag se utiliza para crear un iterator and guardarlo en el Value Stack. Al cerrar el tag generator se elimina del Value Stack, por este motivo solo se puede trabajar con el iterator entre las tags de generator
Atributos
Ejemplo<s:generator val="%{'Madrid', 'Barcelona, 'Zaragoza'}" separator=",">
<ul><s:iterator>
<li><s:property/></li></s:iterator></ul>
</s:generator>
Atributo Tipo Dato Valor Defecto Descripción
val* String El código para ser convertido en un iterator
separator* String delimitador que separa la entrada val en elementos para convertir
converter Converter clase Converter para convertir la entrada String pasa en val a un Objeto, debe ser una clase de tipo Converter, que implemente el interface
org.apache.struts2.util.IteratorGenerator count Integer número máximo de elementos en el iterator
var String variable que referencia al iterator resultante
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Tag sortEl tag sort permite ordenar los elementos de un iterator.
Atributos
Ejemplo<s:generator val="%{'Madrid', 'Barcelona, 'Zaragoza'}" separator=",">
<ul><s:sort comparator="miComparador">
<s:iterator><li><s:property/></li>
</s:iterator></s:sort></ul>
</s:generator>
Atributo Tipo Dato Valor Defecto Descripción
comparator* java.util.Comparator clase Comparator que se utilizará para realizar la comparación de los elementos
source String origen de datos del iterator para ordenarlo
var String variable que referencia al nuevo iterator resultante ordenado
GENERIC TAGSCURSO STRUTS 2
CONTROL TAGS
Tag subsetEste tar permite crear un sublista de un objeto iterator.
Atributos
Ejemplo<s:generator var="ciudades" val="%{'Madrid', 'Barcelona, 'Zaragoza'}" separator=","></s:generator>
<s:subset source="#attr.ciudades" decider="filtroPoblacionDecider"><ul>
<s:iterator><li><s:property/></li>
</s:iterator></ul>
</s:subset>
En el anterior código el atributo decider, invocará al método getFiltroPoblacionDecider(), implementado en el Action el cual realiza un filtro de un listado de ciudades por el número de población.
Atributo Tipo Dato Valor Defecto Descripción
source String origen de datos del iterator
var String variable que referencia al nuevo iterator resultante
count Integer número de entradas en el iterator resultante
decider Decider clase que implemente el interface SubsetIteratorFilter.Decider, el cual determina si una entrada debe ser incluida o no en el iterator resultante.
start Integer índice de comienzo en del iterator definido en el source
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Las data tags se utiliza para manipular o crear datos, como los bean o mensajes i18n.
La lista de data tags es:• a• action• bean• date• debug• i18n• include• param• property• push• set• text• url
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag aEsta tag presenta un enlace HTML (anchor). Puede aceptar todos los atributos que el elemento HTML
AtributosNo dispone de atributos propios
Ejemplo<s:a href="%{url}" cssClass="link">
Enlace</s:a>
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag actionEl tag action se utiliza para executar un Action y su Result, además añade los parámetros del Action al Context Map del Value Stack
Atributos
Ejemplo<s:action var="loginAction" name="login" namespace="/secure" executeResult="false"/>
Atributo Tipo Dato Valor Defecto Descripción
name* String nombre del Action a ser invocado
namespace String namespace del Action
executeResult Boolean false indica si el resultado del Result debe ser mostrado
flush Boolean true indica si el writer debe realizar un flush al final del Action
ignoreContextParams Boolean false indica si los parámetros de la petición deben ser incluidos cuando se invoca al Action
var String variable que referencia al Action añadido al Context Map
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag beanEl tab bean crea un JavaBean y lo almacena en el Context Map del Value Stack. Este tag es similar en funcionalidad al tag de JSP <jsp:useBean>
Atributos
Ejemplo<s:bean name=”ejercicio.capitulo3.ConvertidorTemperatura” var=”temperatura”>
<s:param name=”celsius” value=”30”/><s:/bean>30º C = <s:property value=”# temperatura.farenheit”/>º F
Atributo Tipo Dato Valor Defecto Descripción
name* String clase completa del JavaBean para crear
var String variable que referencia al JavaBean añadido al Context Map
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag dateEl tag date formatea un objeto de tipo Java Date
Atributos
Ejemplo<s:bean name=”java.util.Date” var=”hoy”/>
Hoy (formato original): <s:property value=”#hoy”/><br>
<s:date name=”#hoy” var=”formato1” format=”dd/mm/yyyy”/>Hoy (mm//dd/yyyy): <s:property value=”#formato1”/><br>
<s:date name=”#hoy” var=”formato2” format=”MMM d, yyyy”/>Hoy (MMM d, yyyy): <s:property value=”#formato2”/><br>
Atributo Tipo Dato Valor Defecto Descripción
name* String valor fecha a formatear
format String patrón formato fecha
nice Boolean false indica si aplicar un formato bonito
var String variable que referencia a la fecha formateada añadido al Value Stack
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag debugEl tag debug devuelve el contenido del Value Stack y otros objetos.
AtributosNo dispone de atributos propios
Ejemplo<s:debug/>
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag i18nEl tag i18n permite obtener un recurso de mensajes y almacenarlo en el Value Stack para poder utilizarlos
Atributos
Ejemplo<s:i18n name="mensajes">
Entre las etiquetas i18n se puede acceder a los mensajes de mensajes.properties.<br/>
<s:property value="text('clave1')"/><br/><s:text name="clave1"/><br/>
</s:i18n>
Atributo Tipo Dato Valor Defecto Descripción
name* String nombre del recursos de mensajes a utilizar (ej. ejercicio/capitulo3/Persona/resourceBundle)
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag includeEl tag include muestra la salida de un Servlet o un JSP
Atributos
Ejemplo<s:include value="/jsp/cabecera.jsp"/><s:include value="/jsp/principal.jsp">
<s:param name="param1" value="value2"/> <s:param name="param2" value="value2"/>
</s:include><s:include value="/jsp/pie.jsp"/>
Atributo Tipo Dato Valor Defecto Descripción
value* String el Servlet/JSP para incluir su respuesta
NOTA: Los parámetros (<param/>) son pasados como request parameters, por lo que hay que utilizar la notación EL ${param.ParamName} para visualizarlos. No utilizar el tag <s:property/> para acceder a los parámetros.
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag paramEl tag param se utiliza para pasar parámetros al tag en el que esté incluido
Atributos
EjemploEl valor del atributo value, siempre se evalua como una expresión OGNL incluso si no sin los delimitadores % {}. //las siguientes asignaciones al parámetro nombre son iguales<s:param name=”nombre” value=”usuario.nombre”/><s:param name=”nombre” value=”%{usuario.nombre}”/>
Para poder utilizar expresiones EL de JSP o texto, hay que definir el valor entre los delimitadores del tag.<s:param name=”nombre”>${header.nombre}</s:param><s:param name=”nombre”>Nombre del usuario en texto</s:param>
Atributo Tipo Dato Valor Defecto Descripción
name* String nombre del parámetro
value String valor del parámetro
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag propertyEste tar permite crear un sublista de un objeto iterator.
Atributos
Ejemplo<s:property value="id">
<s:property value="#session.usuario" default="No Registrado">
Atributo Tipo Dato Valor Defecto Descripción
value String <top stack> valor para ser mostrado
escape Boolean true los caracteres HTML son escapados
default String valor por defecto si el valor de value es null
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag pushEl tag push es similar al tag set. La diferencia es que el tag push, coloca un objeto en el Value Stack, no en el Context Map. Otra carácteristica única del tag push es que el objeto estará disponible en el Value Stack solo entre las tags de apertura y cierre de push.
Atributos
Ejemplo<s:push value=”#session.usuario”>
Usuario ID: <s:property value=”idUsuario”/>Nombre: <s:property value=”nombre”/>Email: <s:property value=”email”/>
</s:push>
Atributo Tipo Dato Valor Defecto Descripción
value* String valor para ser colocado en el Value Stack
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag setEl tag set crea un elemento clave/valor en uno de los siguientes contextos:
• el Context Map del Value Stack• el session map• el application map• el request map• el page map
Atributos
Ejemplo<s:set name=”usuario” value=”#session.usuario”/>
Nombre: <s:property value=”#usuario.nombre”/><br>Email: <s:property value=”#usuario.email”/><br>
Atributo Tipo Dato Valor Defecto Descripción
name String la clave del atributo a crear
value String objeto a ser referenciado por la clave
scope String default el ambito donde obtener la variable, su valor puede ser: application, sessio, request, page o default
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag textEl tag text muestra un mensaje al usuario en función de su idioma (i18n). El mensaje debe estar en el archivo de recursos de mensajes del mismo nombre que el action que está asociado. Si no se encuentra la propiedad el mensaje, entonces se utilizará por defecto el texto que se encuentre en contenido entre las etiquetas text
Atributos
Ejemplo//El recurso de mensajes contiene la siguiente lineamensaje.buscar=Mensaje Buscar {0}
<s:text name="mensaje.buscar"/>
<s:text name="mensaje.buscar">Texto por defecto si no se encuentra la clave “mensaje.buscar”
</s:text>
<s:text name="mensaje.buscar"> <s:param >Parámetro</s:param>
</s:text>
Atributo Tipo Dato Valor Defecto Descripción
name* String clave del mensaje a mostrar
searchValueStack Boolean true buscar en el Value Stack si no se encuentra la clave del mensaje
var String referencia del texto obtenido mediante el tag
GENERIC TAGSCURSO STRUTS 2
DATA TAGS
Tag urlEste tag crea una URL dinámicamente.
Atributos
Ejemplo<s:url var=”urlLogin”
action=”login” namespace=”/secure” scheme=”https” includeParams=”true”/>
Atributo Tipo Dato Valor Defecto Descripción
action String el action que la URL apuntará
anchor String anchor para crear la URL
encode Boolean tru indica si codifica los parámetros
escapeAmp Boolean true indica si debe escaper el carácter ampersnd &
includeContext Boolean true indica si el contexto actual debe ser incluido
includeParams String get puede ser uno de estos tipos: one, get, all
method String el método del action
namespace String el namespace del action
portletMode String modo portlet
scheme String http, https, ftp
value String el valor del destino si no se usa para un action
windowState String para uso de portlets, especifica el estado de la ventana
var String referencia de la url creada mediante el tag
GENERIC TAGSCURSO STRUTS 2
RECUERDA QUE…
Completado el apartado Generic Tags debemos recordar los siguientes conceptos estudiados:
Definición Tipos