SlideShare une entreprise Scribd logo
1  sur  58
Télécharger pour lire hors ligne
Spring Framework - Web Flow




                SPRING FRAMEWORK
Dmitry Noskov   Spring Web Flow 2.3
The Spring WEB stack




            Spring Framework - Web Flow   Dmitry Noskov
Introduction
   MVC extension
   focused on the definition and execution of page
    flow
   Integration
     Spring MVC
     JSF

     Portlet




                      Spring Framework - Web Flow   Dmitry Noskov
What is flow?




            Spring Framework - Web Flow   Dmitry Noskov
Typical web application




             Spring Framework - Web Flow   Dmitry Noskov
Process driven application




             Spring Framework - Web Flow   Dmitry Noskov
Configuration




         Spring Framework - Web Flow   Dmitry Noskov
Web Flow schema
<?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:webflow="http://www.springframework.org/schema/webflow-config"
           xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/   webflow-config
http://www.springframework.org/schema/webflow-config   /spring-webflow-config-2.3.xsd">




                                          Spring Framework - Web Flow   Dmitry Noskov
Flow builder
   basic
<webflow:flow-builder-services
     id="flowBuilderServices"
     view-factory-creator="mvcViewFactoryCreator"
     development="true"
     validator="validator"
     conversion-service="customConversionService"
     expression-parser="ognl"/>




                             Spring Framework - Web Flow   Dmitry Noskov
Flow registry
   basic
<webflow:flow-registry id="flowRegistry"
                           flow-builder-services="builderServices"
                           base-path="/WEB-INF"
                           parent="parent">
    <!—flow locations-->
</webflow:flow-registry>

   specify path
<webflow:flow-location id=""
                           path="/hotels/booking/booking-flow.xml"/>

   location pattern
<webflow:flow-location-pattern value="/**/*-flow.xml" />


                             Spring Framework - Web Flow   Dmitry Noskov
Flow executor
   basic
<webflow:flow-executor id="flowExecutor" flow-registry="ref">
    <!—listeners, repositories-->
</webflow:flow-executor>

   listener
<webflow:flow-execution-listeners>
    <webflow:listener ref="listener" criteria="*"/>
</webflow:flow-execution-listeners>

   repository
<webflow:flow-execution-repository max-executions="5"
                                          max-execution-snapshots="10"/>


                           Spring Framework - Web Flow   Dmitry Noskov
Workflow image




           Spring Framework - Web Flow   Dmitry Noskov
Dispatcher servlet
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value></param-value>
</init-param>
</servlet>


<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>


                             Spring Framework - Web Flow   Dmitry Noskov
Dispatching
   FlowHandlerMapping
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
    <property name="order" value="-1"/>
    <property name="flowRegistry" ref="flowRegistry" />
</bean>

   FlowHandlerAdapter
<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
    <property name="flowExecutor" ref="flowExecutor"/>
</bean>




                               Spring Framework - Web Flow   Dmitry Noskov
Flow




       Spring Framework - Web Flow   Dmitry Noskov
Flow schema

<?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-2.0.xsd">


  …states…


</flow>




                                 Spring Framework - Web Flow     Dmitry Noskov
Essential elements
   state
   transition
   flow data
   expression language




                     Spring Framework - Web Flow   Dmitry Noskov
Input attribute
   simple
    <input name="hotelId" required="true" />

   assign input value
    <input name="hotelId" value="flowScope.bean.itemId" />




                           Spring Framework - Web Flow   Dmitry Noskov
Output value
   flow attribute
<end-state id="bookingConfirmed">
    <output name="booking"/>
</end-state>

   specific
<end-state id="bookingConfirmed">
    <output name="booking" value="booking.id"/>
</end-state>




                           Spring Framework - Web Flow   Dmitry Noskov
Data scope

Conversation

Flow

Request

Flash

View




               Spring Framework - Web Flow   Dmitry Noskov
States
   view
   action
   decision
   subflow
   end




               Spring Framework - Web Flow   Dmitry Noskov
Expression language
   expression types
     standard
     template

   implementation
     Spring EL
     Unified EL

     OGNL




                       Spring Framework - Web Flow   Dmitry Noskov
Special variables
   flowScope, viewScope, etc.
   requestParameters
   currentEvent
   currentUser
   messageContext, resourceBoundle
   flowRequestContext, flowExecutionContext
   flowExecutionUrl
   externalContext

                     Spring Framework - Web Flow   Dmitry Noskov
Typical flow




               Spring Framework - Web Flow   Dmitry Noskov
Rendering views




         Spring Framework - Web Flow   Dmitry Noskov
Simple view
   view state
<view-state id="enterBookingDetails" model="booking" view="path">
    <transition on="proceed" to="reviewBooking" />
    <transition on="cancel" to="cancel" />
</view-state>

   view detection
     by state id
     by relative view id

     by absolute view id




                           Spring Framework - Web Flow   Dmitry Noskov
View resolution
   default
   mvc view resolver
<webflow:flow-builder-services view-factory-creator="mvc" />


<bean id="mvc"
       class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
    <property name="viewResolvers" ref="tilesViewResolver"/>
    <property name="useSpringBeanBinding" value="true" />
</bean>




                             Spring Framework - Web Flow   Dmitry Noskov
Firing events
   simple link
<a href="${flowExecutionUrl}&_eventId=cancel/">Cancel</a>

   hidden field
<input type="submit" value="Cancel" />
<input type="hidden" name="_eventId" value="cancel" />

   submit button
<button type="submit" name="_eventId_proceed">Proceed</button>
<button type="submit" name="_eventId_cancel">Cancel</button>




                         Spring Framework - Web Flow   Dmitry Noskov
Advanced view

<view-state id="enterBookingDetails"
             view=""
             model="booking"
             parent=""
             popup="true/false"
             redirect="true/false" >


 <var name="" class=""/>
 <binder>
   <binding property="checkinDate" />
 </binder>
</view-state>


                           Spring Framework - Web Flow   Dmitry Noskov
Model binding
<on-start>
  <evaluate expression="bookingService.createBooking(hotelId)"
              result="flowScope.booking" />
</on-start>


<view-state id="enterBookingDetails" model="booking">
  <binder>
   <binding property="checkinDate" />
   <binding property="checkoutDate" />
   <binding property="creditCard" />
  </binder>
  <transition on="proceed" to="reviewBooking" />
  <transition on="cancel" to="cancel" bind="false" />
</view-state>


                           Spring Framework - Web Flow   Dmitry Noskov
Validation
   JSR-303
<webflow:flow-builder-services id="" validator="validator" />
<bean id="validator" class="…LocalValidatorFactoryBean"/>

   model validate method
public class Booking implements Serializable {
    public void validateEnterBookingDetails(ValidationContext c) {}
}

   separate validator
public class BookingValidator {
    public void validate(Booking b, ValidationContext c) {}
    public void validateEnterBookingDetails(…) {}
}


                           Spring Framework - Web Flow   Dmitry Noskov
Execution actions




          Spring Framework - Web Flow   Dmitry Noskov
Actions
   set variable
    <set name="flowScope.key" value="value"/>

   evaluate business method
    <evaluate expression="service.find()" result="viewScope.key"/>

   render view fragment
    <render fragments="body" />




                           Spring Framework - Web Flow   Dmitry Noskov
Events
   flow
     on-start
     on-end

   state
     on-entry
     on-render (only for view)

     on-exit

   transition

                        Spring Framework - Web Flow   Dmitry Noskov
Example
<flow>
  <on-start>
    <evaluate
           expression="bookingService.createBooking(hotelId)"
           result="flowScope.booking" />
  </on-start>
  <view-state id="enterBookingDetails" model="booking">
    <on-render>
         <render fragments="body" />
    </on-render>
    <transition on="proceed" to="reviewBooking" />
    <transition on="cancel" to="cancel" bind="false" />
  </view-state>
</flow>


                            Spring Framework - Web Flow   Dmitry Noskov
Business actions
   POJO
<evaluate expression="service.businessMethod()" />

   action
public class CustomAction implements Action {
    public Event execute(RequestContext context) {}
}


<evaluate expression="customAction" />

   multi action


                           Spring Framework - Web Flow   Dmitry Noskov
Action state
   simple
<action-state id="addBooking">
    <evaluate expression="bookingService.addBooking()" />
    <transition to="cancel"/>
</action-state>

   transitioning on evaluation
<action-state id="cancelBooking">
    <evaluate expression="bookingService.cancelBooking()" />
    <transition on="cancelled" to="endState"/>
    <transition on="bookingNotFound" to="booking"/>
    <transition on-exception="org.swf.AccessDenied" to="booking"/>
</action-state>


                           Spring Framework - Web Flow   Dmitry Noskov
Event mapping
Return type                     Event identifier
java.lang.String                the String value
java.lang.Boolean               yes / no
java.lang.Enum                  the enum name
any other type                  success




                    Spring Framework - Web Flow   Dmitry Noskov
Named actions

<action-state id="callTwoMethods">
 <evaluate expression="service.methodOne()">
   <attribute name="name" value="methodOne" />
 </evaluate>
 <evaluate expression="service.methodTwo()">
   <attribute name="name" value="methodTwo" />
 </evaluate>


 <transition on="methodTwo.success" to="showResults" />
</action-state>




                         Spring Framework - Web Flow   Dmitry Noskov
Decision

<decision-state id="hasItems">
 <if test="service.hasItems()"
     then="checkItemsState"
     else="end" />
</decision-state>




                         Spring Framework - Web Flow   Dmitry Noskov
Subflow


<subflow-state id="addAccount" subflow="createAccount">
 <transition on="accountCreated" to="reviewBooking">
   <evaluate expression="bookingService.add(…)" />
 </transition>
 <transition on="creationCancelled" to="end" />
</subflow-state>




                         Spring Framework - Web Flow   Dmitry Noskov
Transition




             Spring Framework - Web Flow   Dmitry Noskov
Advanced

<transition on="cancel"
            on-exception=""
            to="cancel"
            bind="true"
            validate="true“
            history="preserve/discard/invalidate"/>




                          Spring Framework - Web Flow   Dmitry Noskov
Global transition



<global-transitions>
 <transition on="cancel" to="cancel" />
</global-transitions>




                        Spring Framework - Web Flow   Dmitry Noskov
Finish




         Spring Framework - Web Flow   Dmitry Noskov
End state
   simple
<end-state id="cancel" />

   custom view
<end-state id="success"
             view="externalRedirect:controller?result=success"/>

   output
<end-state id="bookingConfirmed">
    <output name="bookingId" value="booking.id" />
</end-state>




                            Spring Framework - Web Flow   Dmitry Noskov
Redirects
   servletRelative
   contextRelative
   serverRelative
   http:// or https://




                          Spring Framework - Web Flow   Dmitry Noskov
FlowHandler
   Interface
public interface FlowHandler {
    public String getFlowId();
    public MutableAttributeMap createExecutionInputMap(…);
    public String handleExecutionOutcome(…);
    public String handleException(…);
}

   Bean
<bean name="hotels/booking" class="test.BookingFlowHandler"/>




                           Spring Framework - Web Flow   Dmitry Noskov
Spring JS




            Spring Framework - Web Flow   Dmitry Noskov
Configuration
   server side
<mvc:resources mapping="/resources/**"
                  location="/, classpath:/META-INF/web-resources/"/>
<mvc:default-servlet-handler />

   client side
<script type="text/javascript"
src="<c:url value="/resources/dojo/dojo.js" />"></script>
<script type="text/javascript"
src="<c:url value="/resources/spring/Spring.js" />"></script>
<script type="text/javascript"
src="<c:url value="/resources/spring/Spring-Dojo.js"/>"></script>



                            Spring Framework - Web Flow   Dmitry Noskov
Simple decoration

<form:input id="searchString" path="searchString"/>
<script type="text/javascript">
 Spring.addDecoration(new Spring.ElementDecoration({
        elementId : "searchString",
        widgetType : "dijit.form.ValidationTextBox",
        widgetAttrs : {promptMessage : "Search hotels by name."}
 }));
</script>




                           Spring Framework - Web Flow   Dmitry Noskov
Regexp

<form:input path="creditCard"/>
<script type="text/javascript">
 Spring.addDecoration(new Spring.ElementDecoration({
   elementId : "creditCard",
   widgetType : "dijit.form.ValidationTextBox",
   widgetAttrs : {
        required : true,
        invalidMessage : "A 16-digit card number is required.",
        regExp : "[0-9]{16}"
   }
 }));
</script>


                           Spring Framework - Web Flow   Dmitry Noskov
Date

<form:input path="checkoutDate"/>
<script type="text/javascript">
 Spring.addDecoration(new Spring.ElementDecoration({
   elementId : "checkoutDate",
   widgetType : "dijit.form.DateTextBox",
   widgetAttrs : {
        datePattern : "MM-dd-yyyy",
        required : true
   }
 }));
</script>



                           Spring Framework - Web Flow   Dmitry Noskov
Conclusion
   handles all navigation steps (including back, refresh)
   clear state management
   full integration with Spring MVC and other




                       Spring Framework - Web Flow   Dmitry Noskov
Books




        Spring Framework - Web Flow   Dmitry Noskov
Links
   Web Flow reference
    http://static.springframework.org/spring-
    webflow/docs/2.3.x/reference/html/index.html
   samples
    https://src.springframework.org/svn/spring-samples/
   forum
    http://forum.springframework.org/forumdisplay.php?f=36
   Spring Web Flow 2 Web Development
    http://www.springsource.org/node/1286
   Refcardz
    http://refcardz.dzone.com/refcardz/spring-web-flow

                         Spring Framework - Web Flow   Dmitry Noskov
Questions




            Spring Framework - Core   Dmitry Noskov
The end




             http://www.linkedin.com/in/noskovd

      http://www.slideshare.net/analizator/presentations

Contenu connexe

Tendances

Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web SocketsFahad Golra
 
Spring MVC
Spring MVCSpring MVC
Spring MVCyuvalb
 
Multi Client Development with Spring
Multi Client Development with SpringMulti Client Development with Spring
Multi Client Development with SpringJoshua Long
 
Spring Web Services
Spring Web ServicesSpring Web Services
Spring Web ServicesEmprovise
 
The Past Year in Spring for Apache Geode
The Past Year in Spring for Apache GeodeThe Past Year in Spring for Apache Geode
The Past Year in Spring for Apache GeodeVMware Tanzu
 
Java Web Programming [9/9] : Web Application Security
Java Web Programming [9/9] : Web Application SecurityJava Web Programming [9/9] : Web Application Security
Java Web Programming [9/9] : Web Application SecurityIMC Institute
 
Spring 4 final xtr_presentation
Spring 4 final xtr_presentationSpring 4 final xtr_presentation
Spring 4 final xtr_presentationsourabh aggarwal
 
the Spring 4 update
the Spring 4 updatethe Spring 4 update
the Spring 4 updateJoshua Long
 
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용Sungchul Park
 
Multi Client Development with Spring
Multi Client Development with SpringMulti Client Development with Spring
Multi Client Development with SpringJoshua Long
 
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)Fahad Golra
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring SessionDavid Gómez García
 
Java Microservices with DropWizard
Java Microservices with DropWizardJava Microservices with DropWizard
Java Microservices with DropWizardBruno Buger
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJini Lee
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session ManagementFahad Golra
 

Tendances (19)

Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web Sockets
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Android ax app wcf
Android ax app wcfAndroid ax app wcf
Android ax app wcf
 
Multi Client Development with Spring
Multi Client Development with SpringMulti Client Development with Spring
Multi Client Development with Spring
 
Java Server Faces
Java Server FacesJava Server Faces
Java Server Faces
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Spring Web Services
Spring Web ServicesSpring Web Services
Spring Web Services
 
The Past Year in Spring for Apache Geode
The Past Year in Spring for Apache GeodeThe Past Year in Spring for Apache Geode
The Past Year in Spring for Apache Geode
 
Java Web Programming [9/9] : Web Application Security
Java Web Programming [9/9] : Web Application SecurityJava Web Programming [9/9] : Web Application Security
Java Web Programming [9/9] : Web Application Security
 
Spring 4 final xtr_presentation
Spring 4 final xtr_presentationSpring 4 final xtr_presentation
Spring 4 final xtr_presentation
 
the Spring 4 update
the Spring 4 updatethe Spring 4 update
the Spring 4 update
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
 
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
 
Multi Client Development with Spring
Multi Client Development with SpringMulti Client Development with Spring
Multi Client Development with Spring
 
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)Lecture 4:  JavaServer Pages (JSP) & Expression Language (EL)
Lecture 4: JavaServer Pages (JSP) & Expression Language (EL)
 
Managing user's data with Spring Session
Managing user's data with Spring SessionManaging user's data with Spring Session
Managing user's data with Spring Session
 
Java Microservices with DropWizard
Java Microservices with DropWizardJava Microservices with DropWizard
Java Microservices with DropWizard
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session Management
 

En vedette

Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVCDzmitry Naskou
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring SecurityDzmitry Naskou
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - CoreDzmitry Naskou
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework Serhat Can
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Banco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase LiteBanco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase LiteFernando Camargo
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIFernando Camargo
 
Spring JDBCTemplate
Spring JDBCTemplateSpring JDBCTemplate
Spring JDBCTemplateGuo Albert
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Orm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел ВейникOrm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел ВейникAlina Dolgikh
 
JoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered designJoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered designFernando Camargo
 
Introduction to JMS and Message-Driven POJOs
Introduction to JMS and Message-Driven POJOsIntroduction to JMS and Message-Driven POJOs
Introduction to JMS and Message-Driven POJOsMatt Stine
 
Hibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic IntroductionHibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic IntroductionEr. Gaurav Kumar
 
State of Securing Restful APIs s12gx2015
State of Securing Restful APIs s12gx2015State of Securing Restful APIs s12gx2015
State of Securing Restful APIs s12gx2015robwinch
 
Spring Security
Spring SecuritySpring Security
Spring SecurityBoy Tech
 

En vedette (20)

Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Rest application
Rest applicationRest application
Rest application
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Banco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase LiteBanco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase Lite
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
 
Spring JDBCTemplate
Spring JDBCTemplateSpring JDBCTemplate
Spring JDBCTemplate
 
Spring security
Spring securitySpring security
Spring security
 
Design de RESTful APIs
Design de RESTful APIsDesign de RESTful APIs
Design de RESTful APIs
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Orm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел ВейникOrm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел Вейник
 
JoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered designJoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered design
 
Introduction to JMS and Message-Driven POJOs
Introduction to JMS and Message-Driven POJOsIntroduction to JMS and Message-Driven POJOs
Introduction to JMS and Message-Driven POJOs
 
Hibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic IntroductionHibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic Introduction
 
State of Securing Restful APIs s12gx2015
State of Securing Restful APIs s12gx2015State of Securing Restful APIs s12gx2015
State of Securing Restful APIs s12gx2015
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
Spring Security 3
Spring Security 3Spring Security 3
Spring Security 3
 

Similaire à Spring Framework - Web Flow

BPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced WorkflowsBPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced WorkflowsAlfresco Software
 
BPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced WorkflowsBPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced WorkflowsAlfresco Software
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3masahiroookubo
 
Volt Showcase - Planning Poker
Volt Showcase - Planning PokerVolt Showcase - Planning Poker
Volt Showcase - Planning Pokerkoffeinfrei
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauSpiffy
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkara JUG
 
Primefaces Confess 2012
Primefaces Confess 2012Primefaces Confess 2012
Primefaces Confess 2012cagataycivici
 
Creating GUI container components in Angular and Web Components
Creating GUI container components in Angular and Web ComponentsCreating GUI container components in Angular and Web Components
Creating GUI container components in Angular and Web ComponentsRachael L Moore
 
Asp.net page lifecycle
Asp.net page lifecycleAsp.net page lifecycle
Asp.net page lifecycleKhademulBasher
 
Windows Azure Cloud Services
Windows Azure Cloud Services Windows Azure Cloud Services
Windows Azure Cloud Services Shiju Varghese
 
125 고성능 web view-deview 2013 발표 자료_공유용
125 고성능 web view-deview 2013 발표 자료_공유용125 고성능 web view-deview 2013 발표 자료_공유용
125 고성능 web view-deview 2013 발표 자료_공유용NAVER D2
 
Jlook web ui framework
Jlook web ui frameworkJlook web ui framework
Jlook web ui frameworkHongSeong Jeon
 
Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...
Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...
Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...Fwdays
 
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...Uniface
 
Building and deploying React applications
Building and deploying React applicationsBuilding and deploying React applications
Building and deploying React applicationsAstrails
 
Component Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanComponent Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanITCamp
 

Similaire à Spring Framework - Web Flow (20)

BPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced WorkflowsBPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced Workflows
 
BPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced WorkflowsBPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced Workflows
 
Vue.js for beginners
Vue.js for beginnersVue.js for beginners
Vue.js for beginners
 
Implementation of GUI Framework part3
Implementation of GUI Framework part3Implementation of GUI Framework part3
Implementation of GUI Framework part3
 
Volt Showcase - Planning Poker
Volt Showcase - Planning PokerVolt Showcase - Planning Poker
Volt Showcase - Planning Poker
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin Lau
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFaces
 
Primefaces Confess 2012
Primefaces Confess 2012Primefaces Confess 2012
Primefaces Confess 2012
 
Creating GUI container components in Angular and Web Components
Creating GUI container components in Angular and Web ComponentsCreating GUI container components in Angular and Web Components
Creating GUI container components in Angular and Web Components
 
Asp.net page lifecycle
Asp.net page lifecycleAsp.net page lifecycle
Asp.net page lifecycle
 
Jsf
JsfJsf
Jsf
 
Meet VueJs
Meet VueJsMeet VueJs
Meet VueJs
 
Windows Azure Cloud Services
Windows Azure Cloud Services Windows Azure Cloud Services
Windows Azure Cloud Services
 
Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)Unit 07: Design Patterns and Frameworks (3/3)
Unit 07: Design Patterns and Frameworks (3/3)
 
125 고성능 web view-deview 2013 발표 자료_공유용
125 고성능 web view-deview 2013 발표 자료_공유용125 고성능 web view-deview 2013 발표 자료_공유용
125 고성능 web view-deview 2013 발표 자료_공유용
 
Jlook web ui framework
Jlook web ui frameworkJlook web ui framework
Jlook web ui framework
 
Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...
Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...
Alexey Kupriyanenko "The State of Modern JavaScript and Web in 2020 - Real us...
 
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
Uniface Lectures Webinar - Building Responsive Applications with Uniface: Dev...
 
Building and deploying React applications
Building and deploying React applicationsBuilding and deploying React applications
Building and deploying React applications
 
Component Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex MoldovanComponent Based UI Architecture - Alex Moldovan
Component Based UI Architecture - Alex Moldovan
 

Dernier

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 

Dernier (20)

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 

Spring Framework - Web Flow

  • 1. Spring Framework - Web Flow SPRING FRAMEWORK Dmitry Noskov Spring Web Flow 2.3
  • 2. The Spring WEB stack Spring Framework - Web Flow Dmitry Noskov
  • 3. Introduction  MVC extension  focused on the definition and execution of page flow  Integration  Spring MVC  JSF  Portlet Spring Framework - Web Flow Dmitry Noskov
  • 4. What is flow? Spring Framework - Web Flow Dmitry Noskov
  • 5. Typical web application Spring Framework - Web Flow Dmitry Noskov
  • 6. Process driven application Spring Framework - Web Flow Dmitry Noskov
  • 7. Configuration Spring Framework - Web Flow Dmitry Noskov
  • 8. Web Flow schema <?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:webflow="http://www.springframework.org/schema/webflow-config" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/ webflow-config http://www.springframework.org/schema/webflow-config /spring-webflow-config-2.3.xsd"> Spring Framework - Web Flow Dmitry Noskov
  • 9. Flow builder  basic <webflow:flow-builder-services id="flowBuilderServices" view-factory-creator="mvcViewFactoryCreator" development="true" validator="validator" conversion-service="customConversionService" expression-parser="ognl"/> Spring Framework - Web Flow Dmitry Noskov
  • 10. Flow registry  basic <webflow:flow-registry id="flowRegistry" flow-builder-services="builderServices" base-path="/WEB-INF" parent="parent"> <!—flow locations--> </webflow:flow-registry>  specify path <webflow:flow-location id="" path="/hotels/booking/booking-flow.xml"/>  location pattern <webflow:flow-location-pattern value="/**/*-flow.xml" /> Spring Framework - Web Flow Dmitry Noskov
  • 11. Flow executor  basic <webflow:flow-executor id="flowExecutor" flow-registry="ref"> <!—listeners, repositories--> </webflow:flow-executor>  listener <webflow:flow-execution-listeners> <webflow:listener ref="listener" criteria="*"/> </webflow:flow-execution-listeners>  repository <webflow:flow-execution-repository max-executions="5" max-execution-snapshots="10"/> Spring Framework - Web Flow Dmitry Noskov
  • 12. Workflow image Spring Framework - Web Flow Dmitry Noskov
  • 13. Dispatcher servlet <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> Spring Framework - Web Flow Dmitry Noskov
  • 14. Dispatching  FlowHandlerMapping <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"> <property name="order" value="-1"/> <property name="flowRegistry" ref="flowRegistry" /> </bean>  FlowHandlerAdapter <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter"> <property name="flowExecutor" ref="flowExecutor"/> </bean> Spring Framework - Web Flow Dmitry Noskov
  • 15. Flow Spring Framework - Web Flow Dmitry Noskov
  • 16. Flow schema <?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-2.0.xsd"> …states… </flow> Spring Framework - Web Flow Dmitry Noskov
  • 17. Essential elements  state  transition  flow data  expression language Spring Framework - Web Flow Dmitry Noskov
  • 18. Input attribute  simple <input name="hotelId" required="true" />  assign input value <input name="hotelId" value="flowScope.bean.itemId" /> Spring Framework - Web Flow Dmitry Noskov
  • 19. Output value  flow attribute <end-state id="bookingConfirmed"> <output name="booking"/> </end-state>  specific <end-state id="bookingConfirmed"> <output name="booking" value="booking.id"/> </end-state> Spring Framework - Web Flow Dmitry Noskov
  • 20. Data scope Conversation Flow Request Flash View Spring Framework - Web Flow Dmitry Noskov
  • 21. States  view  action  decision  subflow  end Spring Framework - Web Flow Dmitry Noskov
  • 22. Expression language  expression types  standard  template  implementation  Spring EL  Unified EL  OGNL Spring Framework - Web Flow Dmitry Noskov
  • 23. Special variables  flowScope, viewScope, etc.  requestParameters  currentEvent  currentUser  messageContext, resourceBoundle  flowRequestContext, flowExecutionContext  flowExecutionUrl  externalContext Spring Framework - Web Flow Dmitry Noskov
  • 24. Typical flow Spring Framework - Web Flow Dmitry Noskov
  • 25. Rendering views Spring Framework - Web Flow Dmitry Noskov
  • 26. Simple view  view state <view-state id="enterBookingDetails" model="booking" view="path"> <transition on="proceed" to="reviewBooking" /> <transition on="cancel" to="cancel" /> </view-state>  view detection  by state id  by relative view id  by absolute view id Spring Framework - Web Flow Dmitry Noskov
  • 27. View resolution  default  mvc view resolver <webflow:flow-builder-services view-factory-creator="mvc" /> <bean id="mvc" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator"> <property name="viewResolvers" ref="tilesViewResolver"/> <property name="useSpringBeanBinding" value="true" /> </bean> Spring Framework - Web Flow Dmitry Noskov
  • 28. Firing events  simple link <a href="${flowExecutionUrl}&_eventId=cancel/">Cancel</a>  hidden field <input type="submit" value="Cancel" /> <input type="hidden" name="_eventId" value="cancel" />  submit button <button type="submit" name="_eventId_proceed">Proceed</button> <button type="submit" name="_eventId_cancel">Cancel</button> Spring Framework - Web Flow Dmitry Noskov
  • 29. Advanced view <view-state id="enterBookingDetails" view="" model="booking" parent="" popup="true/false" redirect="true/false" > <var name="" class=""/> <binder> <binding property="checkinDate" /> </binder> </view-state> Spring Framework - Web Flow Dmitry Noskov
  • 30. Model binding <on-start> <evaluate expression="bookingService.createBooking(hotelId)" result="flowScope.booking" /> </on-start> <view-state id="enterBookingDetails" model="booking"> <binder> <binding property="checkinDate" /> <binding property="checkoutDate" /> <binding property="creditCard" /> </binder> <transition on="proceed" to="reviewBooking" /> <transition on="cancel" to="cancel" bind="false" /> </view-state> Spring Framework - Web Flow Dmitry Noskov
  • 31. Validation  JSR-303 <webflow:flow-builder-services id="" validator="validator" /> <bean id="validator" class="…LocalValidatorFactoryBean"/>  model validate method public class Booking implements Serializable { public void validateEnterBookingDetails(ValidationContext c) {} }  separate validator public class BookingValidator { public void validate(Booking b, ValidationContext c) {} public void validateEnterBookingDetails(…) {} } Spring Framework - Web Flow Dmitry Noskov
  • 32. Execution actions Spring Framework - Web Flow Dmitry Noskov
  • 33. Actions  set variable <set name="flowScope.key" value="value"/>  evaluate business method <evaluate expression="service.find()" result="viewScope.key"/>  render view fragment <render fragments="body" /> Spring Framework - Web Flow Dmitry Noskov
  • 34. Events  flow  on-start  on-end  state  on-entry  on-render (only for view)  on-exit  transition Spring Framework - Web Flow Dmitry Noskov
  • 35. Example <flow> <on-start> <evaluate expression="bookingService.createBooking(hotelId)" result="flowScope.booking" /> </on-start> <view-state id="enterBookingDetails" model="booking"> <on-render> <render fragments="body" /> </on-render> <transition on="proceed" to="reviewBooking" /> <transition on="cancel" to="cancel" bind="false" /> </view-state> </flow> Spring Framework - Web Flow Dmitry Noskov
  • 36. Business actions  POJO <evaluate expression="service.businessMethod()" />  action public class CustomAction implements Action { public Event execute(RequestContext context) {} } <evaluate expression="customAction" />  multi action Spring Framework - Web Flow Dmitry Noskov
  • 37. Action state  simple <action-state id="addBooking"> <evaluate expression="bookingService.addBooking()" /> <transition to="cancel"/> </action-state>  transitioning on evaluation <action-state id="cancelBooking"> <evaluate expression="bookingService.cancelBooking()" /> <transition on="cancelled" to="endState"/> <transition on="bookingNotFound" to="booking"/> <transition on-exception="org.swf.AccessDenied" to="booking"/> </action-state> Spring Framework - Web Flow Dmitry Noskov
  • 38. Event mapping Return type Event identifier java.lang.String the String value java.lang.Boolean yes / no java.lang.Enum the enum name any other type success Spring Framework - Web Flow Dmitry Noskov
  • 39. Named actions <action-state id="callTwoMethods"> <evaluate expression="service.methodOne()"> <attribute name="name" value="methodOne" /> </evaluate> <evaluate expression="service.methodTwo()"> <attribute name="name" value="methodTwo" /> </evaluate> <transition on="methodTwo.success" to="showResults" /> </action-state> Spring Framework - Web Flow Dmitry Noskov
  • 40. Decision <decision-state id="hasItems"> <if test="service.hasItems()" then="checkItemsState" else="end" /> </decision-state> Spring Framework - Web Flow Dmitry Noskov
  • 41. Subflow <subflow-state id="addAccount" subflow="createAccount"> <transition on="accountCreated" to="reviewBooking"> <evaluate expression="bookingService.add(…)" /> </transition> <transition on="creationCancelled" to="end" /> </subflow-state> Spring Framework - Web Flow Dmitry Noskov
  • 42. Transition Spring Framework - Web Flow Dmitry Noskov
  • 43. Advanced <transition on="cancel" on-exception="" to="cancel" bind="true" validate="true“ history="preserve/discard/invalidate"/> Spring Framework - Web Flow Dmitry Noskov
  • 44. Global transition <global-transitions> <transition on="cancel" to="cancel" /> </global-transitions> Spring Framework - Web Flow Dmitry Noskov
  • 45. Finish Spring Framework - Web Flow Dmitry Noskov
  • 46. End state  simple <end-state id="cancel" />  custom view <end-state id="success" view="externalRedirect:controller?result=success"/>  output <end-state id="bookingConfirmed"> <output name="bookingId" value="booking.id" /> </end-state> Spring Framework - Web Flow Dmitry Noskov
  • 47. Redirects  servletRelative  contextRelative  serverRelative  http:// or https:// Spring Framework - Web Flow Dmitry Noskov
  • 48. FlowHandler  Interface public interface FlowHandler { public String getFlowId(); public MutableAttributeMap createExecutionInputMap(…); public String handleExecutionOutcome(…); public String handleException(…); }  Bean <bean name="hotels/booking" class="test.BookingFlowHandler"/> Spring Framework - Web Flow Dmitry Noskov
  • 49. Spring JS Spring Framework - Web Flow Dmitry Noskov
  • 50. Configuration  server side <mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/web-resources/"/> <mvc:default-servlet-handler />  client side <script type="text/javascript" src="<c:url value="/resources/dojo/dojo.js" />"></script> <script type="text/javascript" src="<c:url value="/resources/spring/Spring.js" />"></script> <script type="text/javascript" src="<c:url value="/resources/spring/Spring-Dojo.js"/>"></script> Spring Framework - Web Flow Dmitry Noskov
  • 51. Simple decoration <form:input id="searchString" path="searchString"/> <script type="text/javascript"> Spring.addDecoration(new Spring.ElementDecoration({ elementId : "searchString", widgetType : "dijit.form.ValidationTextBox", widgetAttrs : {promptMessage : "Search hotels by name."} })); </script> Spring Framework - Web Flow Dmitry Noskov
  • 52. Regexp <form:input path="creditCard"/> <script type="text/javascript"> Spring.addDecoration(new Spring.ElementDecoration({ elementId : "creditCard", widgetType : "dijit.form.ValidationTextBox", widgetAttrs : { required : true, invalidMessage : "A 16-digit card number is required.", regExp : "[0-9]{16}" } })); </script> Spring Framework - Web Flow Dmitry Noskov
  • 53. Date <form:input path="checkoutDate"/> <script type="text/javascript"> Spring.addDecoration(new Spring.ElementDecoration({ elementId : "checkoutDate", widgetType : "dijit.form.DateTextBox", widgetAttrs : { datePattern : "MM-dd-yyyy", required : true } })); </script> Spring Framework - Web Flow Dmitry Noskov
  • 54. Conclusion  handles all navigation steps (including back, refresh)  clear state management  full integration with Spring MVC and other Spring Framework - Web Flow Dmitry Noskov
  • 55. Books Spring Framework - Web Flow Dmitry Noskov
  • 56. Links  Web Flow reference http://static.springframework.org/spring- webflow/docs/2.3.x/reference/html/index.html  samples https://src.springframework.org/svn/spring-samples/  forum http://forum.springframework.org/forumdisplay.php?f=36  Spring Web Flow 2 Web Development http://www.springsource.org/node/1286  Refcardz http://refcardz.dzone.com/refcardz/spring-web-flow Spring Framework - Web Flow Dmitry Noskov
  • 57. Questions Spring Framework - Core Dmitry Noskov
  • 58. The end http://www.linkedin.com/in/noskovd http://www.slideshare.net/analizator/presentations