Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Curso de Spring Web Flow

No description
by

Adrián de la Horra

on 16 October 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Curso de Spring Web Flow

En cualquier aplicación web se crean wizards
Permiten distribuir en modulos
No dejan claro el orden de pasos
Struts
Spring MVC
JSF
Otros basados en servlets
Deja claro el orden de pasos

Limita los caminos del usuario

Controla las acciones de volver a páginas anteriores

Permite ir rellenando un objeto en varias pantallas

Las validaciones funcionan como en SpringMVC
Para Configurar SpringWebFlow en tu proyecto
Las librerías necesarias son...
spring-web.jar
commons-loggin.jar
spring-binding.jar
spring-webflow.jar
Un ContextLoaderListener para el Spring Framework

El setup para webflow....
<dependency>
<groupId>
org.springframework.webflow
</groupId>
<artifactId>
spring-webflow
</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
Usando MVN con la siguiente dependencia
View-state
Tipos de estado en SWF
Start-state
En la declaración del flow

Indica cual es el primer estado


start-state="identificadorPrimerEstado"
Start-state
Indica la pantalla a visualizar

Indica las salidas permitidas en esa pantalla

<view-state
id="estado"

view="nombreJSP"
>
<
transition on="next" to="idNuevoEstado"
></transition>
</view-state>
View-state
Equivalen, aunque no directamente, a los controladores.

Es donde se procesará la información entre estados

Permiten ejecutar varias acciones

<action-state id="estadoAccion">
<evaluate expression="miAccionService.hacerAlgo()" />
<transition on="x" to="yaEstaHecho"></transition>
</action-state>
Action-state
Las vistas pueden recibir un command ó modelo

Rellenan las variables del formulario con el contenido del modelo, y posteriormente del formulario pasa al mismo modelo
View-state II
Y esa variable de modelo, ¿desde donde se rellena?
Si queremos emplear el resultado del método, le indicaremos en que variable guardarlo

<action-state id="estadoAccion">
<evaluate
expression="miAccionService.hacerAlgo()"
result="flowScope.miValor"
/>
<transition to="yaEstaHecho"></transition>
</action-state>
Action-state II
Cuando queremos bifurcar el flujo para:
Mostrar pantallas distintas
Realizar acciones distintas
Enviar a distintos finales

<decision-state id="idTest">
<if test="
caminos == null
" then="sinCaminos"/>
<if test="
caminos.numero gt 2
" then="muchosCaminos" />
<if
test=
"decisionService.elegirCaminoCorto(caminos)"

then=
"caminoCorto"
else=
"caminoLargo"/>
</decision-state>
Decision-state
Cada flujo puede tener 1 o varios puntos finales

Distintos puntos finales permiten informar desde un subflujo como ha terminado (OK,ERROR,...)

Indicar una vista (o redirección) es opcional

<end-state id="endFlujo"
view="externalRedirect:contextRelative:/private_area/home"
/>
End-state
<!-- Enables FlowHandler URL mapping -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<property name="flowExecutor" ref="flowExecutor" />
</bean>

<!-- Maps request paths to flows in the flowRegistry;. -->
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<property name="order" value="0"/>
<property name="flowRegistry" ref="flowRegistry" />
</bean>
Modificar la configuración de Spring MVC (web.xml o recurso incluido)
<subflow-state id="idEstado" subflow="
subflow-flow
">
<
input
name="datoEntrada" value="flowScope.datoEntrada"/>
<
output
name="respuesta" value="flowScope.respuesta"/>
<
transition
on="fin1" to="siguienteEstado"></transition>
<transition on="fin2" to="otroEstado"></transition>
</subflow-state>
Subflows
Permite tener:
estados iguales, con jsp distinta
la misma jsp con modelos de entrada distintos
mismo estado con salidas distintas (perfiles usu)
acceso al mismo subflujo con distinto modelo
Herencia en estados
<view-state id="estadoHijo" view="paginaHija.jsp"
model="modeloHijo" parent="estadoPadre">
<transition on="next" to="next" />
</view-state>
Herencia en estados II
Dudas
SpringSource Tool Suite


Eclipse
Herramienta gráfica
Struts, Spring MVC,...
Reenvian el formulario de la pantalla anterior
Repiten la petición
El programador es el responsable de redirigir.

Spring Web Flow
Implementa automáticamente 'Redirect after POST'
El problema del F5
Tras enviar una orden de alta o contratación no queremos que esta se repita.

Si pulsa en volver del navegador, podría volver a enviar la misma orden.

Opción de invalidar el historial:
<transition on="next" to="idState"
history="invalidate"
/>
discard
preserve
Retroceder tras fin de flujo
Un framework para definir flujos en aplicaciones web
Spring
Web Flow
Añadir las librerías al proyecto
En el web.xml
Otros frameworks como...
Lo que nos lleva a los distintos "scope" del flujo
Subflows: como se puede añadir un subproceso
<view-state id="estado1"
model="datosPersonales"
view="preguntar">
por Adrián de la Horra
Decision-state
Action-state
<!-- Executes flows: the entry point into the Spring Web Flow system -->
<webflow:flow-executor id="flowExecutor" >
<webflow:flow-execution-repository max-execution-snapshots="-1"
max-executions="500" />
<webflow:flow-execution-listeners>
<webflow:listener ref="securityFlowExecutionListener" />
</webflow:flow-execution-listeners>
</webflow:flow-executor>

<!-- The registry of executable flow definitions -->
<webflow:flow-registry id="flowRegistry" >
<
webflow:flow-location
path="/WEB-INF/flows/swf-registro-flow.xml"/>
</webflow:flow-registry>
Incluir la configuración de SWF (web.xml o recurso incluido)
Comencemos con un esquema sencillo
Acceso al menú de seguros
Cuestionario




End-state
Entrada y salida en los estados
Declarar una clase con el nombre de la clase del modelo a validar.

NombreModelo
Validator

Anotar la clase con @Component

Los métodos tendrán el nombre de los pasos en los que hay que hacer validación.

validate
NombreDelPaso
Validaciones en el flujo
on-start
Comienzo del flujo

on-entry
Al acceder a un estado (1ª vez)
on-render
Al renderizar una vista
on-exit
Al salir de un estado o flujo

<evaluate expression="miAccionService.hacerAlgo()"
result="flowScope.miValor"/>
Permiten modularizar la lógica de los flujos
Full transcript