You are on page 1of 24

Proyecto struts04_Etiquetas

Etiquetas Struts 2:
El framework struts contiene las etiquetas necesarias para manejar todo lo que
se necesita en una aplicacin web, las etiquetas se dividen en dos tipos
etiquetas genricas y etiquetas de UI, en este documento vamos a ver las
etiquetas genricas. La principal diferencia entre las genricas y las UI es que
las genricas dan salida al contenido directamente desde la etiqueta, mientras
que las UI necesitan o usan plantillas y frecuentemente un grupo de salida
junto con ellas. Para ingresar a la pgina oficial de struts ir a la direccin web
https://struts.apache.org/docs/tag-reference.html
Para trabajar en esta clase usaremos el nuevo proyecto llamado struts04. La
finalidad del proyecto ser manipular la informacin de un estudiante, a
medida que se avanza en el estudio de las etiquetas, veremos tambin su
funcionalidad en el proyecto. El estudiante va a ingresar datos como:
documento, nombre, semestre, estudios, sexo, fecha nacimiento, entre otros.

Proyecto struts04_Etiquetas:
Seguir los siguientes pasos para desarrollar el proyecto.

Crear proyecto web:


llamarlo struts04_Etiquetas. No olvidar generar el archivo web.xml

Copiar las libreras de struts en el proyecto:


No olvidar que es en la carpeta lib del proyecto
Proyecto struts04_Etiquetas

Modificar el archivo web.xml.


Colocando los filtros.

<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>struts04_Etiquetas</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

Crear el archivo index.jsp:


No olvidar colocar la etiqueta de struts, y el sitio de creacin es en la raz de
WebContent. Cuando se ejecute el proyecto desde el IDE, el archivo web.xml
ordena ingresar a este archivo.
NOTA: es posible colocar aqu el formulario, pero por cuestiones pedaggicas,
va a quedar as no ms, para acostumbrarnos a usar las direcciones url de los
accin.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"


pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Index del proyecto</title>
</head>
<body>
<h1>Index del proyecto</h1>
</body>
</html>
Proyecto struts04_Etiquetas

Crear una clase controladora:


Se llamar ControladorPrincipal.java, extender la clase de ActioSupport y crear
el mtodo execute. Esta clase se colocara para tener un orden en un paquete
llamado controladorEtiquetas.

La clase tiene el siguiente cdigo:

package controladorEtiquetas;
import com.opensymphony.xwork2.ActionSupport;
public class ControladorPrincipal extends ActionSupport{
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}

Crear el archivo struts.xml:


No olvidar cambiar el encabezado. Para este tutorial se utiliza como nombre de
package, el mismo del paquete en donde se coloc la clase controladora, es
decir controladorEtiquetas, asi struts sabr donde buscar la clase.

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD


Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
Proyecto struts04_Etiquetas

<constant name="struts.devMode" value="true"></constant>


<package name="controladorEtiquetas" extends="struts-default"
namespace="/">
<action name="ingresar"
class="controladorEtiquetas.ControladorPrincipal" method="execute">
<result name="success" >/vistas/ingresarDatos.jsp</result>
</action>
<action name="mostrar"
class="controladorEtiquetas.ControladorPrincipal" method="execute">
<result name="success">/vistas/mostrarDatos.jsp</result>
</action>
</package>
</struts>

Se aprecia que hay dos acciones configuradas, en el mismo paquete. La


primera se llama ingresar y en su result abre la pgina ingresarDatos.jsp. La
segunda accin se llama mostrar y abre la pgina mostrarDatos.jsp. Esa es la
configuracin que se tiene hasta el momento en el archivo struts.xml. Como ya
se conocen los nombres de las pginas de vistas, proceder a crearlas.

Crear las pginas de vistas:


Se procede a crear las vistas, teniendo en cuenta la configuracin del archivo
struts.xml.
Crear el archivo ingresarDatos.jsp:
Se puede observar en el archivo struts.xml que el resul de la acion mostrar nos
lleva a una pgina llamada ingresarDatos.jsp, la cual est en un paquete
llamado vistas.

En esta pgina vamos crear un formulario, que permite al estudiante ingresar


sus datos personale.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"


pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ingresar datos estudiante</title>
</head>
<body>
Proyecto struts04_Etiquetas

<h2>Pagina formulario ingresar datos estudiante. Tema xhtml, los otros temas
son css_xhtml y simple</h2>

<s:form action="mostrar" theme="xhtml">


<s:textfield name="documento" label="Documento"></s:textfield>
<s:textfield name="nombre" label="Nombre"></s:textfield>
<s:textfield name="correo" label="Correo"></s:textfield>

<s:submit value="Enviar" title="Enviar" ></s:submit>


</s:form>

</body>
</html>

Al correr la accin llamada ingresar, se ver as:

Para el ejemplo se tienen tres campos de texto para recoger la informacin del
estudiante y un botn para enviar la informacin a la siguiente accin. Una vez
recogida la informacin en el formulario; es necesario hacer algo con ella, aqu aparece
el concepto de Modelo en el MVC (Modelo Vista Controlador).

Crear el modelo:
Es decir una clase llamada Estudiante.java, para organizacin se crea en un paquete
llamado modelos. La clase debe implementar serializable y tener los atributos que se
recogen en la pagina JSP de ingresarDatos. La ubicacin en el proyecto de la clase
Estudiante.java que forma parte del Modelo es.
Proyecto struts04_Etiquetas

El cdigo de la clase es:

package modelos;

import java.io.Serializable;

public class Estudiante implements Serializable{


private static final long serialVersionUID = 1L;
private String documento,nombre,correo;
private int id;
public Estudiante() {
super();
}
public Estudiante(String documento, String nombre,
String correo) {
super();
this.documento = documento;
this.nombre = nombre;
this.correo = correo;
}
//aqu van los getters y setters
}
Se aprecia que esta clase tiene dos constructores uno con los campos como
argumentos y otro sin argumentos. Tambin tiene los getters y setters de las variables.
Se tiene ya el modelo, ahora vamos a la clase controladora para completar su
codificacin.

Codificar clase controladora:


Esta clase hasta el momento solo tiene codificado, que extiende de ActionSupport y el
mtodo execute de una manera muy bsica. Aqu es necesario crear las mismas
variables o atributos que se crearon en la clase de modelo llamada Estudiante.java
(documento, nombre y correo) todos de tipo String. Adicionalmente se tiene que crear
una instancia de la clase Estudiante. Con la codificacin planteada la clase debe
quedar as:

import modelos.Estudiante;

public class ControladorPrincipal extends ActionSupport{


private String documento,nombre,correo;
private Estudiante estudiante;
Proyecto struts04_Etiquetas

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
estudiante = new Estudiante();
estudiante.setDocumento(this.documento);
estudiante.setNombre(this.nombre);
estudiante.setCorreo(this.correo);

return SUCCESS;
}
//aqu van los getters y setters
}
Con lo anterior lo que se ha hecho es coger los datos del formulario y guardarlos en
una instancia de la clase Estudiante. Normalmente estos datos van a ser guardados en
una base de datos o algo similar.
Para este ejemplo, se van a mostrar en otra pgina JSP que se va a llamar
mostarDatos.jsp para verificar que si se realiz bien la guardada de los datos.

Crear las pginas de vistas:


Crear el archivo mostarDatos.jsp
Esta pgina tambin va a estar en el paquete vistas. Su objetivo es solamente el de
mostrar el contenido del objeto Estudiante de la clase controladora.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"


pageEncoding="ISO-8859-1"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Mostrar datos Estudiante</title>
</head>
<body>
<h2>Mostrar datos de Estudiante</h2>
<s:property value="documento"/>
<s:property value="nombre"/>
<s:property value="correo"/>
</body>
</html>

Con lo anterior se observa el funcionamiento de los formularios en struts, manejando


una clase de modelo. Tambin la manera como se muestra la informacin ingresada
por el usuario en otra pgina JSP.
Proyecto struts04_Etiquetas

Validacin de formularios con struts:


Se utiliza el interceptor validator de struts. Se puede hacer con unarchivo .xml o con
anotaciones, para este tutorial veremos con anotaciones.

Validacin con anotaciones:


La validacin con anotaciones se hace colocando dichas anotaciones en los metodios
setters de los campos en la clase controladora. Para este tutorial la clase controladora
es ControladorPrincipal.java colocar la anotacin en el setter del campo documento
para que sea obligatorio.

Colocar la anotacin:
La anotacin a colocar es

@RequiredStringValidator(message="El documento es un
campo obligatorio")
public void setDocumento(String documento) {
this.documento = documento;
}

Colocar etiqueta fielerror:


Para que funcione correctamente, se debe indicar el sitio en donde se quieren mostrar
el mensaje, mediante la etiqueta fielderror es de aclarar que se puede definir
cualquier pgina para mostrar el mensaje.

Por ejemplo en el mismo formulario de ingresar datos:

<s:fielderror />
<s:form action="mostrar" theme="xhtml">
<s:textfield name="documento" label="Documento"
required="true"></s:textfield>
<s:textfield name="nombre" label="Nombre"></s:textfield>
<s:textfield name="correo" label="Correo"></s:textfield>

<s:submit value="Enviar" title="Enviar" ></s:submit>


</s:form>

Crear el result input para el formulario validado:


Debido que en el formulario se estn haciendo validaciones, es necesario crear un
result de para input. Se hace en el archivo struts.xml.
Proyecto struts04_Etiquetas

Validacin con .xml:


Valida usando un archivo xml de caractersticas especiales, los pasos para validar con
xml son:

Crear archivo xml de validacin:


Se crea en el mismo paquete en donde esta la clase controladora que se quiere validar.
Proyecto struts04_Etiquetas

Actividad laboratorio struts:


Con la explicacin terica y el desarrollo practico hecha por el docente del proyecto
struts04_Etiquetas, y apoyndose con la documentacin en lnea y la teora y prctica
expuesta en las siguientes pginas, usted debe crear un nuevo proyecto al que va a
llamar etiquetasApellidoNombre y en este proyecto recibir y mostrar los datos de un
empleado de una empresa dedicada a la construccin de casas. Los formularios deben
ingresar los siguientes datos.
Para la empresa:
o RUT:
o Nombre
o Direccin
o PBX
o Correo electrnico
Para los proyectos:
o Cdigo
o Nombre
o Valor
o Aprobado (SI o NO)
o Tipo (Apartamento, Casa, Campestre)
o Pas (Colombia, Venezuela, EEUU, Canad, Mxico)
para los Empleados:
o documento
o Nombre
o Celular personal
o Celular corporativo
o Direccin casa
o Departamento (Administrativo, Tcnico, Operativo)
o Cargo
o Sueldo
o Casado (SI o NO)
o Estudios (Bsica, Media, Universidad, Post grado)
Proyecto struts04_Etiquetas

Etiquetas struts de tipo genricas:


Los etiquetas de control se utilizan para manipular el flujo de

Etiquetas Struts de control:


Sirven para controlar el flujo del programa en las pginas jsp, y el manejo de
las colecciones.

If elseif else:
Si la condicin en la etiqueta <s: if> se evala como "true", slo se evala esta
etiqueta y se descartan otras.
Si la condicin en la etiqueta <s: if> se evala como "false" y la etiqueta <s:
elseif> se evala como "true", se procesa el cuerpo de la etiqueta <s: elseif>.
Si la condicin en etiquetas <s: if> y <s: elseif> se evala como "false", slo
se procesa la etiqueta <s: else>.

Ejemplo:

Iterator:
Ya vimos un ejemplo sencillo de esta etiqueta, ahora ver cmo funciona usando
informacin que este en una clase.

IteratorStatus:
La siguiente es la informacin de la clase IteratorStatus
The iterator tag can export an IteratorStatus object so that one can get information about the
status of the iteration, such as:
index: current iteration index, starts on 0 and increments in one on every iteration
count: iterations so far, starts on 1. count is always index + 1
first: true if index == 0
Proyecto struts04_Etiquetas

even: true if (index + 1) % 2 == 0

last: true if current iteration is the last iteration

odd: true if (index + 1) % 2 == 1

Ejemplo:
Para el ejemplo crear un arrayList en la clase java y recorrerlo con el iterator de
struts.
Crear la variable de coleccin en la clase java.
o private List<String> lenguajes;
o crear los mtodos de acceso
o llenar la variable de coleccin, puede ser en el mtodo execute.

En la pgina jsp
o Colocar la etiqueta iterator
o Mostrar los datos del arrayList
Proyecto struts04_Etiquetas

Implementar las otras opciones de status y ver qu ocurre.

Sort:
Ordena una lista, tiene los siguientes atributos.

comparator (requerido): Objeto Comparator a utilizar para comparar los


valores de la lista.
source: Lista a ordenar.
var: Nombre con el que almacenar la nueva lista. Se almacenar como
atributo de page context.
Ejemplo:
Necesitamos crear una variable de tipo Comparator. Con sus respectivos
mtodos de acceso. Esto en la clase de accin.
Proyecto struts04_Etiquetas

En la pagina jsp, se llama de esta manera.

Subset:
Obtiene un subconjunto de un iterador. Tiene los siguientes atributos.

count: Nmero mximo de elementos que queremos obtener.


decider: Objeto Decider que determinar si el elemento debe incluirse en el
nuevo iterador.
source: Iterador inicial.
Proyecto struts04_Etiquetas

var: Nombre con el que se almacenar el nuevo iterador en page context.

Ejemplo:
Necesitamos crear un objeto de tipo decider en la clase de accin. Con sus
respectivos mtodos de acceso. Para el ejemplo crear el decider para que
retorne todo lo que est en la lista y comienza con la letra C. Podemos usar
otra caracterstica de la lista, como por ejemplo matches, end, content, entre
otras. Como los elementos de la lista son de tipo String, se castea el objeto en
el decider a String. Por eso podemos acceder a los mtodos del objeto String,
como startWith.

En la pgina jsp. Crar el tag Subset, con los atributos que vamos a manejar.
Para este ejemplo decider, source y var.

Generator:
Genera un nuevo iterador. Los valores se obtienen dividiendo la cadena val
usando como separador el carcter indicado en separator. Tiene los siguientes
atributos:
converter: Objeto de tipo Converter con el que realizar las distintas
operaciones que sean necesarias con cada valor.
count: Nmero mximo de elementos que queremos generar.
Proyecto struts04_Etiquetas

separator (requerido): Separador utilizado para transformar la cadena en los


distintos valores del iterador.
val (requerido): La cadena de la que se generarn.
var: Nombre con el que se almacenar el nuevo iterador.

Ejemplo:
En la clase java se tiene que crear una instancia del objeto Converter con sus
respectivos mtodos de acceso. Para este ejemplo la lista tiene objetos String,
por eso se castea a String el convertidor.

En la pagina jsp, se tiene. Que colocar la etiqueta generator. De la siguiente


manera.

Append:
Crea un nuevo iterador a partir de varios iteradores pasados como parmetro
en forma de etiquetas param. Como resultado muestra los datos de un iterador
y despus los del siguiente iterador y asi sucesivamente. Tiene los siguientes
atributos.
var: el nombre que tendr el iterador resultante en el ValueStack.

Ejemplo:
En la clase java se crea dos arrayList para el ejemplo lista1 y lista2, se llenan y
se generan sus mtodos de acceso.

En la pgina jsp. En la etiqueta append, se coloca el atributo var para darle un


nombre de variable al append y poder usarlo en otra parte. Luego se agregan
las colecciones usando la etiqueta param. Luego usando la etiqueta iterador,
se itera la variable de la etiqueta append.
Proyecto struts04_Etiquetas

Merge:
Crea un nuevo iterador unin de los distintos iteradores pasados como parmetro mediante
etiquetas param. En liugar de mostrar los datos de una coleccin y luego los de la otra, esta
etiqueta muestra:

primer dato lista1

primer dato lista2

segundo dato lista1

segundo dato lista2

Utiliza los siguientes atributos.

var: Nombre que se usar en ValueStack para el nuevo iterador.

Ejemplo:
En la clase java se crean dos collecciones con sus respectivos mtodos de acceso y se
llenan.
Proyecto struts04_Etiquetas

En la pgina jsp se utiliza la etiqueta merge, se agregan las colecciones usando el atributo
param y por ltimo se itera, para ver los resultados.
Proyecto struts04_Etiquetas

Etiquetas Struts de Data


Las etiquetas de data sirven para manipulacin o creacin de datos, algunas se ven a
continuacin con ejemplos prcticos:

Set:
Asigna un valor a una variable, opcionalmente indicando el mbito al que aadirla. El valor
se puede indicar utilizando el atributo value, o encerrando el valor en la propia etiqueta.
Tiene los siguientes atributos

name: Nombre a utilizar para la variable.

scope: mbito en el que aadir la variable. Puede ser application, session,


request, page, o action. Por defecto se utiliza action.

value: Valor a asignar.

Ejemplo:
En la pgina jsp que se vaya a utilizar

Bean:
Instancia un Java Bean. Se puede pasar valores a las propiedades del bean utilizando
etiquetas param.

name (requerido): La clase a instanciar. Debe respetar la especificacin para las clases
java Bean.

var: Nombre con el que se aadir la instancia a ValueStack.

Ejemplo:
Para la clase java Bean, crear una clase con las caractersticas de java Bean, llamada
BeanEmpleado, con los atributos documento, nombre, direccin, sueldo.
Proyecto struts04_Etiquetas

Ahora manejar el Bean (ingresarDatos y mostrarDatos), el siguiente cdigo va en una


pagina jsp.
Proyecto struts04_Etiquetas

Date:
Permite mostrar una fecha almacenada en una cierta variable indicando opcionalmente el
formato a utilizar.

format: Formato a utilizar para mostrar la fecha. Si queremos usar siempre el mismo
formato podemos crear un archivo properties con una entrada struts.date.format. Por
defecto se utiliza el formato DateFormat.MEDIUM.

name (requerido): Nombre de la variable que contiene la fecha a mostrar.

nice: Utiliza un formato que facilita la lectura. Por defecto se utiliza ingls para mostrar
los mensajes; si queremos traducirlo a algn otro idioma tendremos que recurrir a las
funciones de internacionalizacin de Struts 2. Las claves a traducir son las siguientes:

Ejemplo:
En este ejemplo se crearan dos variables tipo Date en la clase java. Una Calendar, para
configurar la fecha actual y la fecha de ao nuevo.

Ahora en la pgina jsp tenemos.

Include:

Parecido a action con el parmetro executeResult, pero, a diferencia de este, permite


incluir cualquier recurso. Como el include de JSP tambin se le pueden pasar parmetros
Proyecto struts04_Etiquetas

para que sea dinmico con etiquetas param, pero estos valores no se acceden como
propiedades de ValueStack, sino como parmetros de la peticin. En el ejemplo se puede
apreciar cmo se accede a estos parmetros. Este tag (include), lo que hace es colocar el
contenido de la pgina llamada, en el sitio de la pgina que hace el llamado.

Tiene como atributos:

value (requerido): El recurso a incluir.

Ejemplo:

Crear una pgina jsp llamada miInclude.jsp, en otra pgina la llamamos con el tag include y
sus parmetros,

Pagina miInclude.jsp, pagina que se va a traer y colocar en la posicin de donde se llame


con el tag include

Pagina jsp que utiliza el tag.

Pagina jsp que es llamad con el tag y forma de ver el parmetro enviado
Proyecto struts04_Etiquetas

Push:
Coloca un Bean y luego puede ser usado el bean dentro de la etiqueta push de
forma ms simple. Los atributos que usa push son:
Value: obligatorio, es el bean, debe colocarse el nombre de la variable bean
Ejemplo:
En la pagina jsp donde se va a utilizar la etiqueta.
Proyecto struts04_Etiquetas

You might also like