UNIVERSIDAD AUTONOMA DE CHIAPAS
FACULTAD DE CONTADURIA Y ADMINISTRACIÓN
LICENCIATURA EN SISTEMAS COMPUTACIONALES.
APLICACIONES WEB
M.C FELIPE ANTONIO ROMAN ALBORES
STRUTS-TAGS
EDUARDO PÉREZ RUÍZ
TUXTLA GUTIERREZ CHIAPAS, A 01 DE OCTUBRE DEL 2013.
1
ContenidoRESUMEN...........................................................................................................................................4
INCLUDE.............................................................................................................................................5LABEL................................................................................................................................................10Action (Acciones)..............................................................................................................................11ACTIONERROR..................................................................................................................................12ACTIONMESSAGE.............................................................................................................................14FILE...................................................................................................................................................15FORM...............................................................................................................................................17COMPONENT....................................................................................................................................18HEAD................................................................................................................................................18HIDDEN............................................................................................................................................18I18N..................................................................................................................................................19IF-ELSEIF-ELSE...................................................................................................................................19Password..........................................................................................................................................22Property...........................................................................................................................................22Push.................................................................................................................................................23Param...............................................................................................................................................24Radio................................................................................................................................................24Reset................................................................................................................................................25CHECKBOXLIST.................................................................................................................................25COMBOBOX......................................................................................................................................28DOUBLESELECT.................................................................................................................................30DATE.................................................................................................................................................31Select................................................................................................................................................33Set....................................................................................................................................................34Submit..............................................................................................................................................34Text..................................................................................................................................................35TextArea...........................................................................................................................................37TextField...........................................................................................................................................37Struts Tag Generator........................................................................................................................39INPUTTRANSFERSELECT:..................................................................................................................41ITERATOR:........................................................................................................................................42MERGE:............................................................................................................................................44OPTGROUP:......................................................................................................................................46
CONCLUSION…………………………………………………………………………………………………………………………….. 48
REFERENCIAS…………………………………………………………………………………………………………………………..49
2
Tabla de Figuras
Fig. 1 Implementación del INCLUDE..................................................................................................8
Fig. 2 configuraciones del strutx.xml, index.jsp, tags.jsp y la clase.jav.......................................9
Fig. 3 configuracion de index.jsp y struts.xml...........................................................................11
Fig. 4 Label generado de la configuración anterior..................................................................11
Fig. 5 configuracion de los 3 componentes(.xml, .jsp y .java)...................................................12
Fig. 6 Ejecución con éxito del ACTION......................................................................................12
Fig. 7 configuración de los 3 elementos principales para el ACTIONERROR.............................13
Fig. 8 ACTIONERROR (no concluido).........................................................................................13
Fig. 9 Configuracion final de los elementos del ACTIONMESAGE.............................................14
Fig. 10 ACTIONMESSAGE en ejecucion (no concluido)............................................................15
Fig. 11 Configuracion de los componentes y ejecución del tag FIELD.......................................17
Fig. 12 Estructura e implementación del HEAD........................................................................18
Fig. 13 Estructura del HIDDEN..................................................................................................19
Fig. 14 i18n............................................................................................................................19
Fig. 15 Configuracion de los componentes del Optiontransferselect.......................................21
Fig. 16 Accion.java y resultado.jsp para el tag PROPERTY.......................................................23
Fig. 17 Estructura del RESET.....................................................................................................25
Fig. 18 CHECKBOXLIST en ejecucion.........................................................................................28
Fig. 18 COMBOBOX en ejecución.............................................................................................30
Fig. 19 SELECT en ejecución......................................................................................................33
Fig. 20 función SET en ejecución..............................................................................................34
Fig. 21 Ejecución del elemento SUBMIT...................................................................................35
3
RESUMENHoy en día es de gran importancia saber que para el desarrollo de
aplicaciones web, se necesita que estas puedan ser creadas de una manera sápida y por supuesto eficiente, es ahí donde entra lo que hoy en día es conocido como STRUTS2 que no es más que un framework que nos ayuda en la realización de aplicaciones web de forma más sencilla, además struts2 hace uso de un modelo especial llamado Modelo Vista Controlador, que para ser sincero al principio no entendía de su significado pero al realizar esta práctica me ayudo ya que me base de distintas fuente en donde mencionaban este modelo, y comprendí que este modelo hace una separación entre los componentes para la re[presentación de la información y la interfaz del usuario permitiéndonos así poder tener un mejor control de las acciones a realizar para que sean vistas desde la interfaz de usuario; lo primero que se debe hacer es configurar los struts mediante archivos XML, ya que son los que se encargan de hacer la mayor parte del trabajo.
Pero struts2 no trabaja solo posee varia herramientas y etiquetas o Tags, con los que podemos trabajar y que es lo que habla esta práctica, algunas resultaron fácil de implementar y de comprobar su resultado, otras no se logró obtener el resultado deseado, además algunos tags como el i18n que me resulto difícil entenderle pero investigando un poco más encontré que son interceptores que nos ayudan o nos brindan un soporte de idioma para nuestras aplicaciones; además de ese elemento hubieron más que al igual no entendía el concepto y peor aún como implementarlos, aunque fueron pocos pues la mayoría si se pudo comprobar y examinar los resultados.
4
INCLUDE.
Función:
Parecido a action con el parámetro executeResult, pero, a diferencia de este, permite incluir cualquier recurso. Como el include de JSP también se le pueden pasar parámetros para que sea dinámico con etiquetas param, pero estos valores no se acceden como propiedades de ValueStack, sino como parámetros de la petición.
Sintaxis:
5
INDEX.JSP
%-- Document : index Created on : 28/09/2013, 12:22:01 PM Author : MARIO ARTURO--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <%@ taglib uri="/struts-tags" prefix="s"%> <s:include value="tags-include.jsp"> <s:param name="web">http://localHost.com</s:param> </s:include> </body></html>
6
TAGS-INCLUDE.JSP
<%-- Document : tags-include Created on : 28/09/2013, 06:43:24 PM Author : MARIO ARTURO--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Bienvenido a ${param.web}</h1> </body></html>
STRUTS.XML
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="mi-paquete" extends="struts-default"> <action name="*" class="ejemTags">
<result name="success"> index.jsp </result> </action> <action name="Hola" class="ejemTags"> <result name="success">tags-include.jsp</result> </action> </package></struts>
7
EJEMTAGS.JAVA
import static com.opensymphony.xwork2.Action.SUCCESS;import com.opensymphony.xwork2.ActionSupport;//import org.apache.struts2.views.jsp.IncludeTag;
public class ejemTags extends ActionSupport { private String web; public String getContenido() { return web; } public String execute() throws Exception { web="http://localHost.com"; return SUCCESS; }}
WEB.XML<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <select-class>org.apache.struts2.views.jsp.ui.InputTransferSelectTag</select-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <error-page> <error-code>404</error-code> <location>/construccion.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/index.jsp</location> </error-page>
A continuación unas impresiones de pantalla de la realización de este TAGS.
Fig. 1 Implementación del INCLUDESTRUTS
INDEX.JSP
8
STRUTS DEL LABEL
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /><constant name="struts.custom.i18n.resources"
value="ApplicationResources" /><package name="default" namespace="/" extends="struts-
default"><action name="Label" class="MARIO ARTURO.LabelTag">
<result name="success">index.jsp</result></action>
LABEL.
Función:
Sirve para crear etiquetas como el HTML pero a diferencia que se puede implementar dentro de un formulario.
Sintaxis:
10
INDEX DEL LABEL
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@taglib prefix="s" uri="/struts-tags"%><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> label1:<s:label value="NOMBRE" />
Fig. 3 configuracion de index.jsp y struts.xml
Fig. 4 Label generado de la configuración anterior.
Action (Acciones)
<action name="Nombre_Accion" class="Paquete.Nombre_Clase"> <result name="error">/pagina_error.jsp</result> <result name="success">/pagina_exito.jsp</result></action>
Las acciones son las encargadas de definir cual será la clase que se encargará de procesar la petición solicitada y cual será la respuesta dependiendo del resultado. Estas acciones se registran dentro de struts.xml.
La estructura básica de una acción es la siguiente:
11
Fig. 5 configuracion de los 3 componentes(.xml, .jsp y .java)
En ejecución:
Fig. 6 Ejecución con éxito del ACTION
ACTIONERROR Muestra los errores que se produjeron en las acciones, si es que existen. Podemos añadir errores utilizando el método addActionError(String error) de la interfaz ValidationAware, que ActionSupport implementa. Los métodos y propiedades de ValidationAware también estarán disponibles en la vista, por lo que es posible en su lugar comprobar si existen errores con el método hasActionErrors() e iterar directamente sobre la colección actionErrors.
xxxx.java
12
1.2. import com.opensymphony.xwork2.ActionSupport;3.4. @SuppressWarnings("serial")5. public class Accion extends ActionSupport {6. public String execute() {7. addActionError("Oh dios mío, ¡un error!");8. return ERROR;9. }
10. }
xxxx.jsp
1. <%@ taglib uri="/struts-tags" prefix="s"%> 2. 3. <html> 4. <body> 5. <s:actionerror /> 6. </body> 7. </html>
Fig. 7 configuración de los 3 elementos principales para el ACTIONERROR
En ejecución (no terminado)
Fig. 8 ACTIONERROR (no concluido)
13
ACTIONMESSAGESimilar a actionerror, pero en lugar de errores en la acción sirve para
mostrar mensajes de la acción, los cuales añadimos utilizando el métodoaddActionMessage(String mensaje) de la interfaz ValidationAware. Como el anterior, también podríamos utilizar el método hasActionMessages() para comprobar la existencia de mensajes e iterar sobre la colección de strings actionMessages.org.apache.struts2.views.jsp.ui.ActionMessageTag
Accion.java
1. import com.opensymphony.xwork2.ActionSupport; 2. 3. @SuppressWarnings("serial") 4. public class Accion extends ActionSupport { 5. public String execute() { 6. addActionMessage("Tengo un mensaje para usted."); 7. return SUCCESS; 8. } 9. }
resultado.jsp
1. <%@ taglib uri="/struts-tags" prefix="s"%> 2. 3. <html> 4. <body> 5. <s:actionmessage/> 6. </body> 7. </html>
14
Fig. 9 Configuracion final de los elementos del ACTIONMESAGE
En ejecución (no terminado)
Fig. 10 ACTIONMESSAGE en ejecucion (no concluido)
FILE
Muestra un campo file de HTML. Para facilitarnos la vida podemos aprovechar el interceptor fileUpload que se encuentra en la selección de interceptores por defecto (defaultStack) y que funciona de forma parecida al interceptor param. Basta crear setters y getters en la acción para las nuevas propiedades nombre (el archivo en si), nombreContentType (el tipo MIME del archivo subido) o nombreFileName (el nombre del archivo subido) para tener acceso a estos valores en la acción.org.apache.struts2.views.jsp.ui.FileTagaccept: atributo del mismo nombre de HTML que permite indicar los tipos MIME que acepta el campo.
Index.jsp
15
Fig. 11 Configuracion de los componentes y ejecución del tag FIELD
FORM Crea un elemento form de HTML.org.apache.struts2.views.jsp.ui.FormTagaction: Acción a la que se enviará la petición con los datos del formulario. También se puede enlazar otras páginas o servlets. Si no utilizamos el atributo para especificar el destino se utiliza la misma página del formulario.namespace: Espacio de nombres al que pertenece la acción a la que se enviará la petición. Por defecto se utiliza el espacio de nombres actual.validate: Si queremos validar los campos del formulario antes de enviarlos.
COMPONENTUtilizado para crear nuestras propias etiquetas sin tener que recurrir a la API de etiquetas de JSP.org.apache.struts2.views.jsp.ui.ComponentTag
HEADEtiqueta auxiliar que se coloca dentro de la etiqueta head de HTML y se encarga de generar distintos elementos necesarios para otras etiquetas, como las etiquetas para la carga de hojas de estilo o scripts.org.apache.struts2.views.jsp.ui.HeadTag
18
Fig. 12 Estructura e implementación del HEAD
HIDDENCrea un campo oculto.org.apache.struts2.views.jsp.ui.HiddenTag
Fig. 13 Estructura del HIDDEN
I18NCarga un archivo de recursos adicional con la traducción de nuestros mensajes y los coloca en ValueStack de forma que puedan ser accedidos fácilmente por el código que se encuentre dentro de la etiqueta.
org.apache.struts2.views.jsp.I18nTag
name (requerido): Nombre del ResourceBundle a cargar.
19
Fig. 14 i18n
IF-ELSEIF-ELSELa típica sentencia condicional.org.apache.struts2.views.jsp.IfTagorg.apache.struts2.views.jsp.ElseIfTagorg.apache.struts2.views.jsp.ElseTag
test (requerido para if y elseif): la expresión a comprobar
Optiontransferselect
Crea un componente consistente en dos selects cuyos elementos pueden traspasarse de uno a otro.Ejemplo: index
20
Struts
Fig. 15 Configuracion de los componentes del Optiontransferselect
Password
Crea un elemento password de HTML.
Ejemplo:resultado.jsp
PropertyMuestra una propiedad de ValueStack u otro objeto de ActionContext.Ejemplo:
22
Accion.java
resultado.jsp
Fig. 16 Accion.java y resultado.jsp para el tag PROPERTY
PushAñade el valor especificado a lo alto de la pila.Ejemplo:
23
RadioTag.jsp
Strust
Param
Utilizada para añadir parámetros a otras etiquetas.
RadioCrea un conjunto de radio buttons HTML.
24
Accion.java
1. import com.opensymphony.xwork2.ActionSupport; 2. import java.util.List; 3. import java.util.ArrayList; 4. 5. @SuppressWarnings("serial") 6. public class Accion extends ActionSupport { 7. private List<String> lenguajes; 8. 9. public List<String> getLenguajes() { 10. return lenguajes; 11. } 12. 13. public String execute() { 14. lenguajes = new ArrayList<String>(); 15. lenguajes.add("Python"); 16. lenguajes.add("Java"); 17. lenguajes.add("Ruby"); 18. lenguajes.add("C#"); 19. lenguajes.add("C++"); 20. lenguajes.add("Lisp"); 21. return SUCCESS; 22. } 23.}
Resultado.jsp
1. <%@ taglib uri="/struts-tags" prefix="s"%> 2. 3. <html> 4. <body> 5. <s:form> 6. <s:radio label="Selecciona tu lenguaje preferido" list="lenguajes" /> 7. <s:submit value="Enviar" /> 8. </s:form> 9. </body> 10.</html>
Reset
Crea un botón que borra los datos introducidos en el formulario.
resultado.jsp
1. <%@ taglib uri="/struts-tags" prefix="s"%> 2. 3. <html> 4. <body> 5.
25
6. <s:form action="Otro"> 7. <s:textfield label="Nombre" /> 8. <s:password label="Contraseña" /> 9. <s:reset value="Borrar" /> 10. <s:submit value="Enviar" /> 11.</s:form> 12. 13.</body> 14.</html>
Fig. 17 Estructura del RESET
CHECKBOXLISTCrea una lista de checkboxes relacionados (todos con el mismo atributo
name). Esto implica que el valor del elemento no será un booleano indicando si está marcado o no, como en el caso de checkbox, sino una lista con los valores marcados.SINTAXIS
checklist.jsp
Struts.xml
26
Código en ejecución:
Fig. 18 CHECKBOXLIST en ejecucion
COMBOBOXCrea una combinación de select y caja de texto. El valor de la caja de texto
se auto rellena según el elemento seleccionado en el select.emptyOption: Indica si queremos añadir una opción vacía.
combobox.jsp
Struts.xml
28
Fig. 18 COMBOBOX en ejecución
DOUBLESELECTCrea dos elementos select HTML, con el segundo de ellos modificando sus valores dependiendo del valor seleccionado en el primero.doubleList (requerido): Lista con los valores que tendrá el segundo select.doubleMultiple: Determina si en el segundo select se pueden seleccionar varios valores o solo uno.doubleName (requerido): Nombre del elemento.list (requerido): Lista con los valores que tendrá el primer select.
Resultado.jsp
30
Artista.java
Acción.java
DATEPermite mostrar una fecha almacenada en una cierta variable indicando opcionalmente el formato a utilizar.
31
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.Date.jsp
Acción.java
32
SelectEsta función nos sirve para seleccionar datos por medio de un listado desplegable que al darle click sobre algún campo este selecciona y envía la información seleccionada.
Sintaxis: <s:select label="What's your favor search engine"headerKey="-1" headerValue="Select Search Engines"list="searchEngine"name="yourSearchEngine" />
33
Código del select
Función Select en funcionamiento
Fig. 19 SELECT en ejecución.
SetLa función set nos sirve para colocar un dato mediante nosotros lo definamos dentro del código de la aplicación.
Código de la función set
Funcionamiento de set
34
Fig. 20 función SET en ejecución.
SubmitEsta función nos sirve para borrar todos los datos ingresados en un cuadro
de texto o bien enviar los datos de un formulario.
Código de la función
Funcionamiento de Submit
35
Fig. 21 Ejecución del elemento SUBMIT
TextEsta función sirve para imprimir datos en forma de texto sin formato o bien
predefiniéndole un formato mediante el código.
Código de la función Text
Funcionamiento del Text
36
TextAreaEsta función nos sirve para imprimir datos en forma de texto pero en un
campo de texto de varias columnas y filas que nosotros podamos definir el ancho y largo del cuadro de texto que se verá en pantalla.
Código de la función TextArea
Funcionamiento del TextArea
37
TextFieldEsta función permite ingresar datos de longitud que se le puede definir y lo
que se le ingrese poder guardarlo y enviarlo, esto se utiliza a la hora de hacer un registro de datos mediante un formulario.
Código de la función TextField
Funcionamiento del TextField
38
Struts Tag GeneratorEsta librería sirve para ordenar una serie de palabras, declaradas en la instrucción Generator, como se logra apreciar en la primera imagen
Código de cómo funciona la Librería Generator en Struts2
39
Struts Tag Url
Código de cómo funciona la Librería Url en Struts2
Esta librería sirve para crear un link, o redireccionar de una manera diferente el acceso a una página.
40
INPUTTRANSFERSELECT:Crea un componente consistente en un select de selección múltiple, un
campo de texto y distintos botones que permiten añadir, eliminar y ordenar los valores.
INDEX.
Struts.
41
Lib2.java.
ITERATOR:Para iterar sobre colecciones. En cada iteración el objeto recuperado se coloca en ValueStack para poder acceder a sus propiedades fácilmente.
org.apache.struts2.views.jsp.IteratorTag
Status: Crea una instancia de IteratorStatus con el nombre indicado. Este objeto expone algunas propiedades muy útiles como index (índice del elemento actual), first (booleano que indica si es el primero elemento), even (booleano que indica si es impar), last (booleano que indica si es el último elemento) u odd (booleano que indica si es par).
42
MERGE:Crea un nuevo iterador unión de los distintos iteradores pasados como
parámetro mediante etiquetas param.
Index.jsp
struts.xml
44
OPTGROUP:Crea un nuevo elemento HTML optgroup (un grupo de opciones para un elemento select).
Index.jsp
Struts.xml
46
CONCLUSION
Como conclusión a la que llego al haber realizado este [practica es que usar struts2 y sus componentes resultan al parecer mucho más sencillo claro hay algunas excepciones, pero la mayor parte struts2 nos brinda más facilidad en la elaboración del aplicaciones web, sin tener que esforzarse demasiado además de que hoy en día usar este framework resulta estar a la vanguardia pues como mencione en el resumen hace uso del Modelo Vista Controlador(MVC) que como mencione nos proporciona una mayor agilidad en cuanto al manejo de los datos separando cada elemento que lo conforma, es decir los XML, los struts y las clases, en donde se puede trabajar separadamente prestando principal atención en el struts.xml pues es ahí donde se realiza la mayor parte de las instrucciones.
Para finalizar no debemos de dejar fuera cada elemento que forma parte este framework pues todos son de gran importancia y es necesario aprender a usarlos pues parte de muchos ellos se emplean en las aplicaciones web’s.
48
ReferenciasAlex. (Junio de 2011). Tutoriales de Programacion Java. Obtenido de Tutoriales de Programacion
Java: http://www.javatutoriales.com/2011/06/struts-2-parte-1-configuracion.html
Raúl González Duque. (Abril de 2004). Mundo geek. Obtenido de Mundo geek : http://mundogeek.net/archivos/2009/02/13/etiquetas-struts-2/
49
Recommended