Sunteți pe pagina 1din 14

Qu ofrece Autentia?

Somos su empresa de Soporte a Desarrollo Informtico


Ese apoyo que siempre quiso tener .
Desarrollo de componentes y proyectos a medida. Auditora de cdigo y recomendaciones de mejora. Arranque de proyectos basados en nuevas tecnologas. Curso de Formacin Direccin de Proyectos Informticos. Gestin eficaz del Tiempo. Arquitecturas de desarrollo Web: Web, J2EE, SOA, WebServices, BPM, etc. Java/ J2EE a todos los niveles: JSPs, Servlets, EJBs, JMS, JNI, etc. Anlisis y diseo orientado a objeto. UML y patrones de diseo. Buenas prcticas en el desarrollo de aplicaciones Tcnicas avanzadas: Lucene, Hibernate, Spring, JSF, Struts, etc.

Nuestra mejor referencia son los conocimientos que compartimos en nuestro web

www.adictosaltrabajo.com
Decenas de entidades cuentan ya con nosotros
Para ms informacin vistenos en www.autentia.com
Tel. 91 675 33 06 - info@autentia.com

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

Home | Quienes Somos | Empleo |

Tutoriales | Contacte

Lanzado

TNTConcept versin 0.6

( 12/07/2007)

Desde Autentia ponemos a vuestra disposicin el software que hemos construido (100% gratuito y sin restricciones funcionales) para nuestra gestin interna, llamado TNTConcept (auTeNTia). Construida con las ltimas tecnologas de desarrollo Java/J2EE (Spring, JSF, Acegi, Hibernate, Maven, Subversion, etc.) y disponible en licencia GPL, seguro que a muchos profesionales independientes y PYMES os ayudar a organizar mejor vuestra operativa. Las cosas grandes empiezan siendo algo pequeo ..... Saber ms en: http://tntconcept.sourceforge.net/

Tutorial desarrollado por: Javier Antoniucci Puedes encontrarme en Autentia Somos expertos en Java/J2EE Contacta en:

NUEVO CATLOGO DE SERVICIOS DE AUTENTIA (PDF 6,2MB) www.adictosaltrabajo.com es el Web de difusin de conocimiento de www.autentia.com

Catlogo de cursos Descargar este documento en formato PDF mbasicoSpringWebFlow.pdf Firma en nuestro libro de Visitas <-----> Asociarme al grupo AdictosAlTrabajo en eConozco
Programadores Java Un empleo de Informtico te espera aqu, ofertas por Tecnologas www.informaticos.com cursos java Aprende de una forma fcil y rpida Elige tu curso y Especialzate! www.Solocursos.net/Cursos Juegos Java Gratuitos Divertidos Juegos Java en Regalo iDate Prisa! Los Juegos son por 0 www.JuegoJavaGratis.Dindo.es Alojamiento Web - 7,90 1GB Web, 20GB Transferencia, PHP4/5, ASP .NET, MySQL, SQL Server silicontower.net

Fecha de creacin del tutorial: 2007-11-26

Manual Bsico de Spring WebFlow


Spring WebFlow es un Controlador (http://es.wikipedia.org/wiki/Modelo_Vista_Controlador) que orienta a procesos los flujos de navegacin de una aplicacin definindolos mediante estados y transiciones. A medida que aplicamos Spring WebFlow a nuestros proyectos, nos acostumbramos a sus virtudes y un da nos damos cuenta de que no podramos volver a trabajar como antes. Ms o menos como nos pas cuando descubrimos Struts o cualquier MVC. Y cuando ms avanzamos, ms queremos y Spring es casi inagotable. El objetivo de este tutorial es facilitar el primer contacto con esta tecnologa y analizar su aplicabilidad, recomendar algunos links y comentaros nuestras conclusiones.

Preparacin del proyecto


Comenzaremos creando un proyecto y para este tutorial utilizaremos Eclipse:

Seleccionamos proyecto web:

1 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

Seleccionamos un nombre y un servidor:

En este paso no es necesario completar nada:

2 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

Y completamos los nombres de las carpetas antes de dar a Finalizar:

A continuacin descargamos de http://www.springframework.org/download las distribuciones que se indican en rojo:

3 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

Copiamos en la carpeta /pruebaWebFlowSimple/web/WEB-INF/lib los JAR los jar que se encuentran en los zip que descargamos y los aadimos al proyecto:

Seleccionando mediante Add Jars los que hemos descargado:

4 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

Configuracin del contexto


Comenzaremos editando /pruebaWebFlowSimple/web/WEB-INF/web.xml para dejarlo como se muestra a continuacin: <?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<context-param> <param-name>webAppRootKey</param-name> <param-value>swf-pruebaWebFlow.root</param-value> </context-param>

<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>

<servlet> <servlet-name>JspRedirector</servlet-name> <jsp-file>/WEB-INF/test/jspRedirector.jsp</jsp-file> </servlet>

<servlet> <servlet-name>pruebaWebFlow</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/pruebaWebFlow-servlet-config.xml </param-value> </init-param>

5 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

</servlet>

<servlet-mapping> <servlet-name>JspRedirector</servlet-name> <url-pattern>/JspRedirector</url-pattern> </servlet-mapping>

<servlet-mapping> <servlet-name>pruebaWebFlow</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>

<jsp-config> <taglib> <taglib-uri>http://www.adesis.com/cm/oi/2</taglib-uri> <taglib-location>/WEB-INF/tld/adesis-cm-io-2.tld</taglib-location> </taglib> </jsp-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

Tambin crearemos un fichero /pruebaWebFlowSimple/web/WEB-INF/pruebaWebFlowSimple-servlet-config.xml como se muestra a continuacin: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flow="http://www.springframework.org/schema/webflow-config" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-1.0.xsd">

<bean name="/asistente.flow" class="org.springframework.webflow.executor.mvc.FlowController"> <property name="flowExecutor" ref="pruebaFlowExecutor" /> <property name="defaultFlowId" value="asistente-flow" /> <property name="cacheSeconds" value="5" /> </bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>

6 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

<flow:registry id="flowRegistry"> <flow:location path="/WEB-INF/flows/**-flow.xml" /> </flow:registry>

<flow:executor id="pruebaFlowExecutor" registry-ref="flowRegistry"> <flow:execution-attributes> <flow:alwaysRedirectOnPause value="false" /> </flow:execution-attributes> </flow:executor>

</beans>

Definicin del flujo


Creamos un fichero /pruebaWebFlowSimple/web/WEB-INF/flows/asistente-flow.xml como se muestra a continuacin: <?xml version="1.0" encoding="UTF-8"?> <flow xmlns="http://www.springframework.org/schema/webflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd">

<start-actions> <action bean="formAction" method="setupForm" /> </start-actions>

<start-state idref="mostrarPaso1" />

<view-state id="mostrarPaso1" view="paso1"> <transition on="siguiente" to="avanzaAPaso2"> <action bean="formAction" method="bind" /> </transition> </view-state>

<action-state id="avanzaAPaso2"> <action bean="formAction" method="validarPaso1YPrepararPaso2" /> <transition on="success" to="mostrarPaso2" /> <transition on="error" to="mostrarPaso1" /> </action-state>

<view-state id="mostrarPaso2" view="paso2"> <transition on="siguiente" to="avanzaAPaso3"> <action bean="formAction" method="bind" /> </transition> <transition on="anterior" to="mostrarPaso1"> <action bean="formAction" method="bind" /> </transition>

7 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

</view-state>

<action-state id="avanzaAPaso3"> <action bean="formAction" method="validarPaso2YPrepararPaso3" /> <transition on="success" to="mostrarPaso3" /> <transition on="error" to="mostrarPaso2" /> </action-state> <end-state id="mostrarPaso3" view="paso3" />

<import resource="asistente-beans.xml" />

</flow>

Vemos cmo el flujo queda determinado por estados desde donde se realizan transiciones a otros estados. Los estados pueden ser de visualizacin o de ejecucin de operaciones, y utilizan beans definidos en asistente-beans.xml:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="formAction" class="es.autentia.tutoriales.manualBasicoSpringWebFlow.controller.action.AsistenteAction"> <property name="formObjectScope" value="FLOW" /> <property name="formObjectName" value="form" /> <property name="formObjectClass" value="es.autentia.tutoriales.manualBasicoSpringWebFlow.controller.form.AsistenteForm" /> </bean>

</beans>

Definicin de las clases


En el flujo se define el bean donde se implementarn las acciones y el form que es un JavaBean donde se almacenan o recuperan los datos que se le muestran al usuario y/o que ste completa. Cuando en asistente-flow.xml se invoca al mtodo bind en una transicin, se est indicando a Spring que realice la copia de los valores de formulario enviados desde el navegador del usuario al formulario del flujo.

package es.autentia.tutoriales.manualBasicoSpringWebFlow.controller.form;

import java.io.Serializable;

public class AsistenteForm implements Serializable {

private static final long serialVersionUID = 3849222383843518624L;

private Integer numero1 = 1;

private Integer numero2 = 2;

8 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

private String mensaje;

public String getMensaje() { return mensaje; }

public void setMensaje(String mensaje) { this.mensaje = mensaje; }

public Integer getNumero1() { return numero1; }

public void setNumero1(Integer numero1) { this.numero1 = numero1; }

public Integer getNumero2() { return numero2; }

public void setNumero2(Integer numero2) { this.numero2 = numero2; }

Crearemos tambin un Action como el siguiente:

package es.autentia.tutoriales.manualBasicoSpringWebFlow.controller.action;

import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.action.FormAction; import org.springframework.webflow.execution.Event;

import es.autentia.tutoriales.manualBasicoSpringWebFlow.controller.form.AsistenteForm;

public class AsistenteAction extends FormAction {

public AsistenteAction() { setFormObjectClass(AsistenteForm.class); }

@Override public Event setupForm(RequestContext context) throws Exception { AsistenteForm form = (AsistenteForm) getFormObject(context); form.setNumero1(1);

9 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

form.setNumero2(2); form.setMensaje("Introduzca los nmeros a sumar"); return super.setupForm(context); }

public Event validarPaso1YPrepararPaso2(RequestContext context) throws Exception { AsistenteForm form = (AsistenteForm) getFormObject(context); Event resultado = null; if (form.getNumero1() < 0 || form.getNumero2() < 0) { form.setMensaje("Los nmeros a sumar deben ser positivos"); resultado = error(); } else { form.setMensaje("El resultado de la suma es " + (form.getNumero1() + form.getNumero2())); resultado = success(); } return resultado; }

public Event validarPaso2YPrepararPaso3(RequestContext context) throws Exception { AsistenteForm form = (AsistenteForm) getFormObject(context); form.setMensaje("Fin de la operacin"); return success(); }

} En el mismo vemos que es muy simple acceder a los datos que se le muestran o que introduce el usuario con la ayuda del form indicado en la configuracin.

Definicin de las pginas


Las pginas son muy simples. En /pruebaWebFlowSimple/web/WEB-INF/jsp/paso1.jsp vemos:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Asistente sumador</title> </head> <body> <h1>Asistente sumador: Paso 1</h1> <form> <input type="hidden" name="_flowId" value="asistente-flow" /> <input type="hidden" name="_eventId" value="siguiente" /> <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}" /> <p>${form.mensaje}</p> <p>Primer nmero: <input type="text" name="numero1" value="${form.numero1}"/></p> <p>Segundo nmero: <input type="text" name="numero2" value="${form.numero2}"/></p> <input type="submit" value="siguiente" />

10 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

</form> </body> </html>

Donde en los campos del formulario se indican el identificador de flujo, de evento y la clave de ejecucin que utiliza WebFlow para mantener el estado de un usuario. En /pruebaWebFlowSimple/web/WEB-INF/jsp/paso2.jsp ponemos:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Asistente sumador</title> </head> <body> <h1>Asistente sumador: Paso 2</h1> <form> <input type="hidden" name="_flowId" value="asistente-flow" /> <input type="hidden" name="_eventId" value="siguiente" /> <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}" /> <p>${form.mensaje}</p> <input type="submit" value="siguiente" /> <input type="submit" value="anterior" onclick="document.forms[0]._eventId.value='anterior';return true;"/> </form> </body> </html>

Y en /pruebaWebFlowSimple/web/WEB-INF/jsp/paso3.jsp:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Asistente sumador</title> </head> <body> <h1>Asistente sumador: Paso 3</h1> <form> <p>${form.mensaje}</p> </form> </body> </html>

Ejecutando la aplicacin
Lanzamos el servidor con la URL http://localhost:8080/pruebaWebFlowSimple/asistente.flow y veremos en funcionamiento el ejemplo del asistente sumador. Una mejora que podemos implementar es utilizar el envo del formulario mediante Post, para conservar limpia la url del navegador del usuario.

Algunos links interesantes


Sitio oficial de Spring, http://www.springframework.org/webflow Documentacin oficial de Referencia , http://static.springframework.org/spring-webflow/docs/1.0.x/reference/index.html Introduccin de Ervacom, http://www.ervacon.com/products/swf/intro/index.html

11 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

Conclusiones
Tras utilizarlo en proyectos de envergadura concluimos que: El Spring WebFlow es un Controlador que orienta a procesos el flujo de navegacin, que no se debe confundir con un BPM (Ver http://en.wikipedia.org/wiki/Business_process_management) ya que el proceso de negocio puede diferir con la navegacin de su interfaz de usuario, los BPM son independientes de las tecnologas de interfaz de usuario y muchos etcteras.. Lo vemos especialmente til en aplicaciones con flujos de mediana a gran complejidad cuyo mantenimiento sea relativamente peridico. Permite generar documentacin actualizada del flujo de navegacin mediante una simple XSD. Puede convivir con otros MVC como el Spring MVC o Struts. Securiza la ejecucin de flujos, evitnado re-call y ataques deny-of-service o cross-site-scripting.

Desde Autentia contamos con los conocimientos y experiencia para ayudarle a sacar la mxima ventaja de las tecnologas ms innovadoras y mejorar la calidad de sus desarrollos software. No dude en contactarse con nosotros mediante www.autentia.com .

This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 License.

Puedes opinar sobre este tutorial aqu

Recuerda
que el personal de Autentia te regala la mayora del conocimiento aqu compartido (Ver todos los tutoriales) Nos vas a tener en cuenta cuando necesites consultora o formacin en tu empresa? Vas a ser tan generoso con nosotros como lo tratamos de ser con vosotros? info@autentia.com Somos pocos, somos buenos, estamos motivados y nos gusta lo que hacemos ...... Autentia = Soporte a Desarrollo & Formacin

Autentia S.L. Somos expertos en: J2EE, Struts, JSF, C++, OOP, UML, UP, Patrones de diseo .. y muchas otras cosas

Nuevo servicio de notificaciones


Si deseas que te enviemos un correo electrnico cuando introduzcamos nuevos tutoriales, inserta tu direccin de correo en el siguiente formulario. Subscribirse a Novedades e-mail

Otros Tutoriales Recomendados (Tambin ver todos)


Nombre Corto Descripcin

Nota: Los tutoriales mostrados en este Web tienen como objetivo la difusin del

12 de 13

26/11/07 22:57

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UM...


conocimiento.

http://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mbasicoS...

Los contenidos y comentarios de los tutoriales son responsabilidad de sus respectivos autores. En algn caso se puede hacer referencia a marcas o nombres cuya propiedad y derechos es de sus respectivos dueos. Si algn afectado desea que incorporemos alguna resea especfica, no tiene ms que solicitarlo. Si alguien encuentra algn problema con la informacin publicada en este Web, rogamos que informe al administrador rcanales@adictosaltrabajo.com para su resolucin. Patrocinados por enredados.com .... Hosting en Castellano con soporte Java/J2EE

www.AdictosAlTrabajo.com

Opimizado 800X600

13 de 13

26/11/07 22:57

S-ar putea să vă placă și