Struts 2 - Round 1
Bien, aquí va el primer intento de correr Struts 2. He tratado de empezar a interactuar con un formulario, pasando por alto el Hola Mundo. Para los que quieran más información, les recomiendo el Core Developers Guide y este tutorial.
El objetivo del ejercicio es simplemente hacer el formulario de login de una aplicación. Esto va a requerir copiar librerías, conocer la arquitectura de Struts 2 y escribir 3 JSP, 1 clase y un XML.
1. Arquitectura básica
Este gráfico muestra sólo una parte de la arquitectura de Struts 2 (la que nos sirve para ahora). Si quieren ver algo un poco más detallado, hacer click aquí.
2. Estructura del Proyecto
Vamos a hacer 3 páginas JSP:
Voy a utilizar aquí los tags de Struts, para lo cual, necesito la directiva tag:
<%@ taglib prefix="s" uri="/struts-tags" %>
Y entre las etiquetas :
<s:form action="Login">
<s:textfield key="usuario" label="Usuario registrado :">
<s:password key="password" label="Contraseña">
<s:submit/>
</s:form>
La única consideración importante aquí es action="Login". Sucede que para que Struts pueda verificar que se está invocando a un Action, se debería invocar (por GET o POST) a Login.action, sin embargo, y debido a que estamos usando las etiquetas de Struts, esto Login aparecerá de forma correcta cuando sea procesada la JSP. Pero esto no es del todo cierto, ya que si la página JSP no es mostrada al usuario como resultado de la invocación a alguna acción, seguirá saliendo en el HTML resultante un action="Login" y esto resultará en un error 404. ¿Te preguntas por qué? Yo también, aunque por el momento no tengo respuesta...
Las páginas index.jsp y principal.jsp no tienen nada de especial, así que las saltearé casi con desprecio.
4. La clase Login.java
Esta es la acción propiamente dicha, aquí va el código:
Lo importante de desatacar es que ya no necesitamos ActionForms ni ningún otro tipo de clase que represente el formulario a tratar. Aquí Struts 2 utiliza el patrón Dependency Injection para rellenar los atributos que se necesiten, por esa razón, si tenemos que tener en cuenta la creación de un get/set para cada componente de presentación que queramos tratar.
Con respecto al método execute(), como ven no recibe parámetros y retorna un String representando el resultado de la acción (error, exito o cualquier otro string).
4. Todo muy lindo, pero ¿cómo configuro esto?. El archivo struts.xml
Lo importante a destacar son las etiquetas:
Saludos
1. Arquitectura básica
Este gráfico muestra sólo una parte de la arquitectura de Struts 2 (la que nos sirve para ahora). Si quieren ver algo un poco más detallado, hacer click aquí.
2. Estructura del Proyecto
Vamos a hacer 3 páginas JSP:
- index.jsp: contendrá simplemente un link y un botón.
- login.jsp: el formulario de entrada de usuario.
- principal.jsp: la página de resultado de comprobación.
- Login.java: esta será nuestra Action. Struts 2 no requiere que herede funcionalidad de ninguna otra clase o implemente alguna interfaz, pero para no darle trabajo al reflection, voy a hacer que herede funcionalidad de ActionSupport.
- struts2-core-2.0.8.jar
- xwork-2.0.3.jar
- freemaker-2.3.8.jar
- ognl-2.6.11.jar
- commons-logging-1.1.jar
Voy a utilizar aquí los tags de Struts, para lo cual, necesito la directiva tag:
<%@ taglib prefix="s" uri="/struts-tags" %>
Y entre las etiquetas :
<s:form action="Login">
<s:textfield key="usuario" label="Usuario registrado :">
<s:password key="password" label="Contraseña">
<s:submit/>
</s:form>
La única consideración importante aquí es action="Login". Sucede que para que Struts pueda verificar que se está invocando a un Action, se debería invocar (por GET o POST) a Login.action, sin embargo, y debido a que estamos usando las etiquetas de Struts, esto Login aparecerá de forma correcta cuando sea procesada la JSP. Pero esto no es del todo cierto, ya que si la página JSP no es mostrada al usuario como resultado de la invocación a alguna acción, seguirá saliendo en el HTML resultante un action="Login" y esto resultará en un error 404. ¿Te preguntas por qué? Yo también, aunque por el momento no tengo respuesta...
Las páginas index.jsp y principal.jsp no tienen nada de especial, así que las saltearé casi con desprecio.
4. La clase Login.java
Esta es la acción propiamente dicha, aquí va el código:
Lo importante de desatacar es que ya no necesitamos ActionForms ni ningún otro tipo de clase que represente el formulario a tratar. Aquí Struts 2 utiliza el patrón Dependency Injection para rellenar los atributos que se necesiten, por esa razón, si tenemos que tener en cuenta la creación de un get/set para cada componente de presentación que queramos tratar.
Con respecto al método execute(), como ven no recibe parámetros y retorna un String representando el resultado de la acción (error, exito o cualquier otro string).
4. Todo muy lindo, pero ¿cómo configuro esto?. El archivo struts.xml
Lo importante a destacar son las etiquetas:
- package: simboliza una unidad de trabajo, es exactamente el mismo concepto que paquetes en UML y en Java.
- action: la acción propiamente dicha
- result: el resultado posible. Si no incluimos un nombre, será utilizado por defecto cuando la acción resulte en SUCCESS.
Saludos
18 Comments:
Muy útil ;)
No se ve bien el código de la clase Login ni del struts.xml
Leandro: finalmente encontré tiempo y lo solucionè.
Saludos
gracias me ayudo mucho,... si tienes mas material estaria agradecido,.. igual tratare de compartir mis experiencias ahora que comienzo un proyecto empleando este framework
Hola, me he bajado los fuentes, he tenido que cambiar la version de java 6 por la 5, ya que tengo tomcat 5.5, pero cuando le doy a submit en index.jsp me da el siguiente error:
No configuration found for the specified action: '/Welcome' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
No he cambiado nada más de los fuentes. ¿Sabéis a que puede deberse?
tambien tengo problemas con el tomcat 5.5 segun el log dice que no mapee bien -.-
There is no Action mapped for namespace / and action name XXXXX
Hola David a mi me funciono quitando namespace="/" en el struts.xml.
Hola... muy interesante trabajar en cosas mas nuevas... esto es STRUTS 2.1.6?
Gracias.
Hola amigo no me funciona bien el ejercicio que bajaste del libro "Struts in Action", espero que en mas publicaciones hagas mejores trabajos.
Querido anónimo: bienvenido al mundo open-source. Si no reniegas, no aprendes.
Buenisimo, estoy apenas comenzando con esto, corre bien, hasta imprimi en la pagina principal.jsp el nombre del usuario. Continuare probando otras cosas con el mismo ejemplo.... Muchas Gracias
Espectacular tutorial,
Me sirvio para hacer mi primera aplicacion en struts 2. : )
Saludos
www.marcosjara.com
Que tal Doc. acabo de pulsar el link para verificar las fuentes de tu demo y esta errada, podrias enviarme el link para la descarga a mi email: cesarricardo_guerra19@hotmail.com
Aqui comparto 2 links interesantes:
http://viviendoconjavaynomoririntentandolo.blogspot.com
http://frameworksjava2008.blogspot.com
estoy haceindo un ejercicio pero no sale podria alguien ayudarme de urgencia sip gracias este es el error q me sale –>
Undeploying …
undeploy?path=/HolaMundoaStruts2
OK – Replegada aplicación en trayectoria de contexto /HolaMundoaStruts2
In-place deployment at C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\build\web
deploy?config=file%3A%2FC%3A%2FUsers%2Foxrl%2FAppData%2FLocal%2FTemp%2Fcontext2529827775334901372.xml&path=/HolaMundoaStruts2
FAIL – Deployed application at context path /HolaMundoaStruts2 but context failed to start
C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\nbproject\build-impl.xml:696: The module has not been deployed.
BUILD FAILED (total time: 4 seconds)
Aqui les dejo mi codigo a ver si ustedes me pueden ayudar y decirme que hacer para q me corra este programa uso netbeans 6.9.1 y tomcat y strust2
este es el --struts.xml--
/pages/HelloWorld.jsp
no me dejan ponder el codigo pero espero q me ayuden con lo q les dije del error de mi ejercicio struts2
que no me corre :
Undeploying …
undeploy?path=/HolaMundoaStruts2
OK – Replegada aplicación en trayectoria de contexto /HolaMundoaStruts2
In-place deployment at C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\build\web
deploy?config=file%3A%2FC%3A%2FUsers%2Foxrl%2FAppData%2FLocal%2FTemp%2Fcontext2529827775334901372.xml&path=/HolaMundoaStruts2
FAIL – Deployed application at context path /HolaMundoaStruts2 but context failed to start
C:\Users\oxrl\Documents\NetBeansProjects\HolaMundoaStruts2\nbproject\build-impl.xml:696: The module has not been deployed.
BUILD FAILED (total time: 4 seconds)
muy malo este tutorial, no apto para gente que no sabe struts, lo cual es una estupidez ya que el curso es de struts!!!! NO RECOMENDABLE
que ridiculo post, si tu sabes algo debes compartirlo, pero hacerlo bien, sin ser tan petulante, estuvo en algo para ser un practicante, pero para la proxima COPIA y PEGA todo el ejemplo del libro "Struts in Action" y trata de darle un valor agregado...
Publicar un comentario
<< Home