http://www.springframework.org/webflow

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
  <title>Spring Web Flow | Springframework.org</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<base href="http://www.springframework.org/" />
<style type="text/css" media="all">@import "misc/drupal.css";</style>
<style type="text/css">@import "modules/bookreview/bookreview.css";</style>

<script language="javascript" src="modules/event/event.js"></script><style type="text/css">@import url(modules/event/event.css);</style>
<script language="javascript" type="text/javascript" src="http://www.springframework.org/modules/tinymce/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
  function mceToggle(id, linkid) {
    element = document.getElementById(id);
    link = document.getElementById(linkid);
    img_assist = document.getElementById('img_assist-link-'+ id);

    if (tinyMCE.getEditorId(element.name) == null) {
      tinyMCE.addMCEControl(element, element.name);
      element.togg = 'on';
      link.innerHTML = 'disable rich-text';
      link.href = "javascript:mceToggle('" +id+ "', '" +linkid+ "');";
      if (img_assist)
        img_assist.href = ""+ element.name;
      link.blur();
    }
    else {
      tinyMCE.removeMCEControl(tinyMCE.getEditorId(element.name));
      element.togg = 'off';
      link.innerHTML = 'enable rich-text';
      link.href = "javascript:mceToggle('" +id+ "', '" +linkid+ "');";
      if (img_assist)
        img_assist.href = ""+ element.name;
      link.blur();
    }
  }
</script>
<style type="text/css" media="all">.mceEditor img { display: inline; }</style>

  <style type="text/css" media="all">@import "themes/spring/style.css";</style>
  <script type="text/javascript"> </script>
</head>

<body bgcolor="#ffffff" >

<div class="hide"><a href="#content" title="Skip navigation." accesskey="2">Skip navigation</a>.</div>

<table id="primary-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
  <tr>
    <td id="home" width="49%">

      <a href="./" title="Home"><img src="files/xdev-spring_logo.jpg" alt="Home" width="524" height="73" border="0" /></a>

    </td>

    <td id="site-infoXXX" width="1%">

      <!--div class='site-name'><a href="./" title="Home">Springframework.org</a></div-->

       

    </td>

    <td class="primary-links" width="50%" align="center" valign="middle">

      <!--<a href="?q=admin/themes/settings"><br />
</a>-->
      <div id="banner"><script type="text/javascript" language="javascript" src="http://www.springframework.org/banner_file.php?pos=0&amp;path=files&amp;max=1"></script></div>

      <!--a href="http://www.springframework.com" title="Interface21 - Spring From the Source"><img src="/files/i21-banner-stamped.jpg" alt="Interface21 - Spring From the Source" border="0" /></a-->

    </td>
  </tr>
</table>

<table id="secondary-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
  <tr>
    <td class="secondary-links" width="75%"  align="center" valign="middle">
      &nbsp;<a href="documentation">Documentation</a>&nbsp; &nbsp;<a href="download">Downloads</a>&nbsp; &nbsp;<a href="support">Support</a>&nbsp; &nbsp;<a href="development">Development</a>&nbsp;
 &nbsp;<a href="search">Search</a>&nbsp;
    </td>
    <td  width="25%"  align="center" valign="middle">
       
    </td>
    </tr>
</table>

<table id="content" border="0" cellpadding="15" cellspacing="0" width="100%">
  <tr>
    <td id="sidebar-left">
      
  <div class="block block-user" id="block-user-1">
    <div class="title"><h3>Navigation</h3></div>
    <div class="content"><div class="menu">
<ul>
<li class="collapsed"><a href="about" title="Mission Statement and Spring Features">About</a></li>
<li class="leaf"><a href="search" title="Search the Site">Search</a></li>
<li class="collapsed"><a href="documentation" title="Documentation">Documentation</a></li>
<li class="leaf"><a href="download" title="Downloads">Downloads</a></li>
<li class="leaf"><a href="event" title="Upcoming events">Events</a></li>
<li class="collapsed"><a href="support" title="Spring Product Support Information">Support</a></li>
<li class="collapsed"><a href="development" title="Links Related to Developement of Spring Itself">Development</a></li>
<li class="leaf"><a href="sub-projects" title="Sub-projects of the main Spring Framework">Sub Projects</a></li>
<li class="collapsed"><a href="links" title="Links to Spring-Related Content">Links</a></li>
<li class="leaf"><a href="jobs" title="Spring Framework Related Jobs">Jobs</a></li>
<li class="leaf"><a href="node/feed" title="The RSS feed to this site">RSS</a></li>

</ul>
</div></div>
 </div>

  <div class="block block-event" id="block-event-1">
    <div class="title"><h3>Upcoming events</h3></div>
    <div class="content"><div class="item-list"><ul><li><a href="node/436" title="Wellington JUG - Spring Meeting">Wellington JUG - Spring Meeting</a>&nbsp(event)<br /> (1 day)</li><li><a href="node/421" title="Spring at JAX conference">Spring at JAX conference</a>&nbsp(event)<br /> (5 days)</li><li><a href="node/420" title="Spring Day at JAX conference, Germany">Spring Day at JAX conference, Germany</a>&nbsp(event)<br /> (6 days)</li><li><a href="node/437" title="Singapore Java Community - Spring Meetup">Singapore Java Community - Spring Meetup</a>&nbsp(event)<br /> (7 days)</li><li><a href="node/438" title="Sydney Spring User Group">Sydney Spring User Group</a>&nbsp(event)<br /> (34 days)</li></ul></div><div class="more-link"><a href="event" title="More events.">more</a></div></div>
 </div>

  <div class="block block-user" id="block-user-0">
    <div class="title"><h3>User login</h3></div>
    <div class="content"><form action="user/login?destination=node%2F294" method="post">
<div class="user-login-block">
<div class="form-item">
 <label for="edit-name">Username:</label><br />
 <input type="text" maxlength="64" class="form-text" name="edit[name]" id="edit-name" size="15" value="" />
</div>
<div class="form-item">
 <label for="edit-pass">Password:</label><br />
 <input type="password" class="form-password" maxlength="64" name="edit[pass]" id="edit-pass" size="15" value="" />
</div>
<input type="submit" class="form-submit" name="op" value="Log in"  />
</div>
<input type="hidden" name="edit[token]" value="612ed592452af7306d034a99b4fdc599" />

</form>
<div class="item-list"><ul><li><a href="user/register" title="Create a new user account.">Create new account</a></li><li><a href="user/password" title="Request new password via e-mail.">Request new password</a></li></ul></div></div>
 </div>

  <div class="block block-block" id="block-block-3">
    <div class="title"><h3>Upcoming Trainings</h3></div>
    <div class="content"><p>Apr 16: Karlsruhe<br />Apr 16: Brisbane<br />Apr 17: Wellington<br />Apr 17: Atlanta<br />Apr 17: Rome<br />Apr 23: Singapore<br />Apr 30: Canberra<br />May 1: Philadelphia<br />May 1: London<br />May 15: Washington<br />May 21: Sydney<br />May 22: Istanbul<br />May 22: Chicago<br />May 22: London<br />Jun 12: Zurich<br />Jun 12: Boston<br />Jun 12: London<br />Jun 18: Melbourne<br /><a href="http://www.interface21.com/training" target="_self">more dates &amp; courses including Spring 2.0, Hibernate, and others...</a></p></div>
 </div>

  <div class="block block-block" id="block-block-2">
    <div class="title"><h3></h3></div>
    <div class="content"><a href="http://www.contegix.com"><img border="0" alt="Contegix Managed Hosting and Colocation" src="http://static.springframework.org/buttons/contegix_spring2.jpg" /></a> <br /><br /> <a href="http://sourceforge.net/projects/springframework"><img width="125" height="37" border="0" alt="SourceForge.net Logo" src="http://sourceforge.net/sflogo.php?group_id=73357&type=2" /></a> <br /><br /> <a href="http://www.atlassian.com/software/jira/"><img border="0" alt="Atlassian JIRA Issue Tracking" src="http://static.springframework.org/buttons/jira.png" /></a> <br /><br /> <a href="http://www.yourkit.com/"><img border="0" alt="Yourkit Java Profiler" src="http://static.springframework.org/buttons/yourkit.gif" /></a> <br /><br /> <a href="http://www.cenqua.com/clover"><img border="0" alt="Clover Code Coverage Tool" src="http://static.springframework.org/buttons/clovered1.gif" /></a>  <br /><br /> <a href="http://www.hello2morrow.com/en/sonarj/sonarj.php"><img border="0" alt="Architecture management for Java projects" src="http://static.springframework.org/buttons/sonarj-150px-transp.gif" /></a>  <br /><br /> <a href="http://petition.eurolinux.org/"><img border="0" alt="Say NO to Software Patents" src="http://static.springframework.org/buttons/patent_button.gif" /></a></div>
 </div>

    </td>
    <td valign="top">
       
      <div id="main">
        <div class="breadcrumb"><a href="">Home</a></div>
        <h1 class="title">Spring Web Flow</h1>
           
         

<!-- begin content -->

  <div class="node ">
     
     
    <span class="submitted"></span>
     
    <div class="content"><p>&nbsp; <div align="center"><img border="0" src="http://static.springframework.org/spring-webflow/images/spring-webflow.png" /></div><div align="center">&nbsp;</div><div align="center"><strong>Project Leads</strong></div><div align="center"><div align="center">&nbsp;</div><div align="center">Keith Donald, <a target="_blank" href="http://www.interface21.com/">Interface21</a></div><div align="center">Erwin Vervaet, <a target="_blank" href="http://ervacon.com/">Ervacon</a> </div>&nbsp;</div><div align="center"><div align="center"><a href="http://sourceforge.net/project/showfiles.php?group_id=73357&amp;package_id=148517&amp;release_id=500152" target="_blank">Download</a> |&nbsp;<a target="_blank" href="http://www.ervacon.com/products/swf/intro/index.html">Practical Introduction</a> | <a target="_blank" href="http://spring.ervacon.com/">Samples</a> | <a target="_self" href="http://static.springframework.org/spring-webflow/docs/current/reference/index.html">Reference Manual</a> | <a target="_self" href="http://static.springframework.org/spring-webflow/docs/current/changelog.txt">Changelog</a> | <a target="_self" href="http://static.springframework.org/spring-webflow/docs/1.0.0/upgrade-guide.pdf">1.0 Upgrade Guide</a> </div><a target="_self" href="http://static.springframework.org/spring-webflow/docs/1.0.0/upgrade-guide.pdf"></a></div>
<blockquote><div align="left">Spring Web Flow is a next generation Java web application controller framework that allows developers to model user actions as high-level modules called flows.&nbsp; The framework delivers improved productivity and testability while providing a strong solution to enforcing navigation rules and managing application state.&nbsp;</div></blockquote>
<blockquote><div align="left" /></blockquote>
<div align="left"><strong>The Big Picture</strong></div><div align="center">&nbsp;</div><div align="left">Spring Web Flow allows developers to build reusable, self-contained controller modules called flows. A flow defines a user dialog that responds to user events to drive the execution of application code to complete a business goal.&nbsp; Consider this graphical view of a flow definition that carries out a search process with the user:</div><div align="left">&nbsp;</div><div align="center"><img border="0" src="http://static.springframework.org/spring-webflow/docs/1.0.x/reference/images/flow-search.png" alt="Seach Flow" title="Seach Flow" />&nbsp;</div><div align="left">&nbsp;</div><div align="left">Flows such as the one above are defined declaratively using a rich domain-specific language (DSL).&nbsp; The XML (XSD) form of this language is the most popular with users.&nbsp; Once defined, a flow is testable in isolation, may be embedded within other flows as a subflow, and may be deployed for execution across multiple environments including Java EE Servlet and Portlet (JSR 168) without change.</div><div align="left">&nbsp;</div><div align="left"><a target="_blank" href="http://spring.ervacon.com/swf-phonebook/phonebook.htm?_flowId=search-flow">See this simple search flow in action</a> and <a target="_blank" href="http://springframework.svn.sourceforge.net/viewvc/springframework/spring-webflow/trunk/spring-webflow-samples/phonebook/src/main/webapp/WEB-INF/flows/search-flow.xml?revision=4341&amp;view=markup">review the complete flow definition</a>.</div><div align="left">&nbsp;</div><div align="left"><strong>Highlights</strong></div><div align="left">&nbsp;</div><div align="left">Spring Web Flow contains a number of innovative features that are popular with our users. These include the ability to:</div><div align="left">
<ul>
<li>Define all controller logic for an application task, such as a search process, in one place, instead of scattering that logic across many places.</li>
<li>Compose flows together to create rich controller modules from simple parts.</li>
<li>Enforce strict user navigation rules with a natural, object-oriented linear programming model and without coding verbose if/else blocks.</li>
<li>Have memory you allocate during flow execution automatically clean itself up when the flow ends or expires.</li>
<li>Deploy a flow for execution in a Servlet environment using your base web framework of choice.</li>
<li>Change base web frameworks without changing your flow definitions.</li>
<li>Change environments all together, going from JUnit test to Portlet for example, without changing your flow definitions.</li>
<li>Change your flow definition logic on-the-fly during integration testing at any time without a container restart.</li>
<li>Receive automatic POST+REDIRECT+GET behavior by default with no custom coding.</li>
<li>Receive automatic browser button support (back, forward, refresh) with no custom coding.</li>
<li>Store task data in any of four managed scopes: request, flash, flow, and conversation; each with their own distinct semantics.</li>
<li>Test flows in isolation without the container.&nbsp; Ensure your application control logic works before you deploy.</li>
</ul>
</div><div align="left"><strong>Getting Started</strong></div><div align="left">&nbsp;</div><div align="left">The best way to get started with Spring Web Flow is read <a target="_blank" href="http://www.ervacon.com/products/swf/intro/index.html">Erwin's practical introduction</a> and to walk through the sample applications.&nbsp; We recommend reviewing all samples, supplementing with <a target="_blank" href="http://static.springframework.org/spring-webflow/docs/1.0.x/reference/index.html">reference manual</a> material as needed from the start. Ten sample applications ship with the release, each demonstrating a distinct set of features.&nbsp; The samples are:</div><div align="left">
<ol>
<li><a target="_blank" href="http://spring.ervacon.com/swf-phonebook/">Phonebook</a> - the original sample demonstrating most features (including subflows)</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-sellitem/">Sellitem</a> - demonstrates a wizard with conditional transitions, flow execution redirects, custom text field formatting, and continuations</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-flowlauncher/">Flowlauncher</a> - demonstrates all the possible ways to launch and resume flows</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-itemlist/">Itemlist</a> - demonstrates REST-style URLs and inline flows</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-shippingrate/">Shippingrate </a>- demonstrates Spring Web Flow together with Ajax technology</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-numberguess">NumberGuess</a> - demonstrates stateful beans, evaluate actions, and &quot;single key&quot; flow execution redirects.</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-birthdate/">Birthdate</a> - demonstrates Struts integration</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-fileupload">Fileupload</a> - demonstrates multipart file upload, set actions, and flash scope</li>
<li>Phonebook-Portlet - the phonebook sample in a Portlet environment (notice how the flow definitions do not change)</li>
<li><a target="_blank" href="http://spring.ervacon.com/swf-sellitem-jsf">Sellitem-JSF</a> - the sellitem sample in a JSF environment</li>
</ol>
</div><p align="left">To build the sample applications for quick evaluation simply:</p><div align="left">
<ol>
<li>Extract the release archive</li>
<li>Access the projects/spring-webflow/build-spring-webflow directory</li>
<li>Execute the ant dist target.</li>
<li>See the target/artifacts directory for deployable .war files for each sample as well as expanded war directories.</li>
</ol>
</div><p align="left">See the release readme.txt and projects/spring-webflow/spring-webflow-samples/readme.txt for more information on the release archive contents and samples, respectively.</p><p align="left">All sample projects are Spring IDE projects directly importable into Eclipse as &quot;Dynamic Web Projects&quot; that can also be deployed inside the Eclipse IDE with Eclipse Web Tools.</p><p align="left"><strong>Notes</strong></p><div align="left">
<ul>
<li>Spring Web Flow runs on Java SE 1.3 or greater, and Java EE 1.3 (Servlet 2.3, Portlet 1.0) or greater.</li>
</ul>
</div><div align="left">
<ul>
<li>Spring 1.2.7 or greater is required for the Spring 1.x series, Spring 2.0 or &gt; is required for the Spring 2.x series.</li>
</ul>
</div><div align="left">
<ul>
<li>Struts Classic (1.2.9), Spring MVC, and JSF integration is shipped out-of-the-box.</li>
</ul>
</div><div align="left">
<ul>
<li>The 1.0 release signifies that API and XSD backwards compatability will be preserved throughout the 1.x series.</li>
</ul>
</div><p align="left"><strong>Additional Resources</strong></p><div align="left">
<ul>
<li>Explore the Web Flow team's journey by reviewing previous release announcements.</li>
<ul>
<li><a target="_self" href="/node/444">1.0.2<br /></a></li>
<li><a target="_self" href="node/400">1.0.1</a></li>
<li><a target="_blank" href="go-webflow" class="undefined">1.0</a></li>
<li><a target="_blank" href="webflow-1.0-rc4">1.0 RC4</a></li>
<li><a target="_blank" href="node/301">1.0 RC3</a></li>
<li><a target="_blank" href="node/293">1.0 RC2</a></li>
<li><a target="_blank" href="node/267" class="undefined">1.0 RC1</a></li>
<li><a target="_blank" href="node/239">1.0 EA</a></li>
<li><a target="_blank" href="node/147">PR5</a></li>
</ul>
</ul>
</div><div align="left">
<ul>
<li>Get community support at <a target="_blank" href="http://forum.springframework.org/">forum.springframework.org</a>.</li>
</ul>
</div><div align="left">
<ul>
<li><div>Read Spring Web Flow Tips and Tricks at the <a target="_blank" href="http://www.ervacon.com/products/swf/index.html" class="undefined">Ervacon Spring Web Flow Portal</a>.</div></li>
</ul>
</div>
<ul>
<li>Track future Spring Web Flow 1.x development with the <a target="_blank" href="http://opensource.atlassian.com/projects/spring/browse/SWF?report=com.atlassian.jira.plugin.system.project:roadmap-panel">Roadmap</a>.</li>
</ul>
<ul>
<li>Report issues in the Spring Web Flow <a target="_blank" href="http://opensource.atlassian.com/projects/spring/browse/SWF" class="undefined">JIRA</a>.</li>
</ul>
<ul>
<li>Visit the&nbsp;Spring Web Flow <strong><a target="_blank" href="http://opensource.atlassian.com/confluence/spring/display/WEBFLOW/Home" class="undefined">WIKI</a>.</strong></li>
</ul>
<br /><a name="attachments"></a><div class="attachments">
</div>
</div>
    <div class="links">&raquo; <a href="user/login">login</a> or <a href="user/register">register</a> to post comments</div>
  </div>
<a id="comment"></a>
<form method="post" action="comment"><div>
<input type="hidden" name="edit[nid]" value="294" />
</div><input type="hidden" name="edit[token]" value="612ed592452af7306d034a99b4fdc599" />
</form>
<!-- end content -->

      </div><!-- main -->
    </td>
     
  </tr>
</table>

<table id="footer-menu" summary="Navigation elements." border="0" cellpadding="0" cellspacing="0" width="100%">
  <tr>
    <td align="center" valign="middle">
      <div class="primary-links"><a href="?q=admin/themes/settings"><br />
</a></div>
      <div class="secondary-links">&nbsp;<a href="documentation">Documentation</a>&nbsp; &nbsp;<a href="download">Downloads</a>&nbsp; &nbsp;<a href="support">Support</a>&nbsp; &nbsp;<a href="development">Development</a>&nbsp;
 &nbsp;<a href="search">Search</a>&nbsp;</div>
    </td>
  </tr>
</table>

<div id="footer-message">
  Copyright 2006, <a href="../../../../undefined/http://www.springframework.org">www.springframework.org</a>&nbsp;&nbsp;-&nbsp; <a href="node/feed">RSS</a> - Managed Hosting by <a href="http://www.contegix.com" target="_blank">Contegix</a> - Site maintained by <a href="http://www.interface21.com">Interface21</a>
</div>
</body>
</html>
