想抽时间研究一下Spring web Flow2,能够找到的唯一电子书是《深入解析Spring+MVC与Web Flow》,我现在摘录本书的一段内容如下,通过这一段,大家可以想象中文背景的程序员具有多大的先天劣势,还可以看到流畅的翻译对一本书来说有多重要!

不多吐槽,下面是正文。

SpringWebFolw(SWF)目标是成为管理web应用页面流程的最佳方案。先要区分一下工作流workflow和webflow,webflow是视图层的概念,用于实现一组页面交互逻辑,类似于.Net的wizard组件;workflow一般是业务层的设计,可能包括主管审核、定时器、施工反馈等业务上的概念,要比webflow复杂很多。

一、相关定义

Scope
SWF增加了范围是SWF着力解决的问题。java应用Scope有三个request、session、application,SWF新增加了两个,flow和onversation
flow:此范围内的对象在 flow 开始时创建, flow 结束时销毁,在 flow 定义文件中可通过flowScope变量名来访问。
onversation:此范围内的对象与 flow 范围对象基本相似,唯一不同在于 conversation 范围内的对象所在的 flow 如果调用了其他 subflow ,那么在 subflow 中也可访问该对象。(也就是说:subflow中能够访问conversation中的对象)

State

SWF定义了如下五种状态,用户表示flow执行到哪一步了。
Action State:利用spring beans执行动作,动作完成后跳转到别的状态
View State:向用户展示一个页面,可以绑定数据
Subflow State:子流程状态
Decision State:进行流程判断的节点,根据判断的结果转换到true/false两个分支
End State:流程结束状态

ActionListener

on-start
on-end
on-render

二、配置相关的结构

FlowRegistry
FlowRegistry 是存放flow的仓库,每个定义flow的XML文档被解析后,都会被分配一个唯一的id,并以 FlowDefinition 对象的形式存放在 FlowResigtry 中。
每个 flow 都必须要有id来标识,如果在配置中省略,那么该flow默认的id将是该定义文件(xml文件)的文件名去掉后缀所得的字符串(bookinging.xml,id=booking)

FlowExecutor
FlowExecutor 是 Spring Web Flow 的一个核心接口,启动某个 flow ,都要通过这个接口来进行。

FlowBuilderServices
定义flowRegistry仓库里的 flow 的一些基本特性,例如,是用 Unified EL 还是 OGNL 、 model (模型)对象中的数据在显示之前是否需要先作转换,等等。一般我们需要在 flowbuilderservices 属性中指明 Spring Web Flow 中所用到的view

FlowHandler 和 FlowHandlerMapping、FlowHandlerAdper
SWF要和Spring MVC结合,必须把前台的路径映射到正确的flow执行入口处,这正是这个三个家伙要干的事情。FlowHandlerMapping将路径映射到flow仓库,FlowHanderAdper作为一个适配器接口帮助找到正确的flow,并交给FlowHandler去执行具体的flow

三、Flow配置示例

<?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"> <secured attributes="ROLE_USER" /> <input name="hotelId" required="true" /> <on-start>
<evaluate expression="bookingService.createBooking(hotelId, currentUser.name)" result="flowScope.booking" />
</on-start> <view-state id="enterBookingDetails" model="booking">
<binder>
<binding property="checkinDate" />
<binding property="checkoutDate" />
<binding property="beds" />
<binding property="smoking" />
<binding property="creditCard" />
<binding property="creditCardName" />
<binding property="creditCardExpiryMonth" />
<binding property="creditCardExpiryYear" />
<binding property="amenities" />
</binder>
<on-render>
<render fragments="body" />
</on-render>
<transition on="proceed" to="reviewBooking" />
<transition on="cancel" to="cancel" bind="false" />
</view-state> <view-state id="reviewBooking" model="booking">
<on-render>
<render fragments="body" />
</on-render>
<transition on="confirm" to="bookingConfirmed">
<evaluate expression="bookingService.persistBooking(booking)" />
</transition>
<transition on="revise" to="enterBookingDetails" />
<transition on="cancel" to="cancel" />
</view-state> <end-state id="bookingConfirmed">
<output name="confirmed" value="'Your booking is confirmed, you can book another hotel by searching again.'"/>
</end-state> <end-state id="cancel" /> </flow>

参考文献:

http://www.cnblogs.com/xwdreamer/archive/2011/11/10/2296939.html

http://docs.spring.io/spring-webflow/docs/2.4.2.RELEASE/reference/html/

https://github.com/SpringSource/spring-webflow-samples

Spring web Flow2学习笔记的更多相关文章

  1. Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点

    Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...

  2. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  3. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  4. 【前端】Web前端学习笔记【2】

    [2016.02.22至今]的学习笔记. 相关博客: Web前端学习笔记[1] 1. this在 JavaScript 中主要有以下五种使用场景 在全局函数调用中,this 绑定全局对象,浏览器环境全 ...

  5. 【前端】Web前端学习笔记【1】

    ... [2015.12.02-2016.02.22]期间的学习笔记. 相关博客: Web前端学习笔记[2] 1. JS中的: (1)continue 语句 (带有或不带标签引用)只能用在循环中. ( ...

  6. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  7. Web前端学习笔记(001)

    ....编号    ........类别    ............条目  ................明细....................时间 一.Web前端学习笔记         ...

  8. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  9. Web Service学习笔记:动态调用WebService

    原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我 ...

随机推荐

  1. Maven内置隐式变量(转)

    Maven提供了三个隐式的变量可以用来访问环境变量,POM信息,和Maven Settings env env变量,暴露了你操作系统或者shell的环境变量.便 如在Maven POM中一个对${en ...

  2. python 装饰器和 functools 模块

    转自:http://blog.jkey.lu/2013/03/15/python-decorator-and-functools-module/ 什么是装饰器? 在 python 语言里第一次看到装饰 ...

  3. [技巧]把Excel里的数据插入到数据库里的方法

    .如果先在6行数据的最后一列在插入一列数据,请先把列名写好,然后再第一行的该列下输入数字, 然后选中该单元格向下拖拽一个单元格然后就能看到黑色的小框, 双击右下角黑色的小点,6行数据就 会填上默认的第 ...

  4. CodeForces 604C 【思维水题】`

    题意: 给你01字符串的长度再给你一个串. 然后你可以在这个串中选择一个起点和一个终点使得这个连续区间内所有的位取反. 求: 经过处理后最多会得到多少次01变换. 例如:0101是4次,0001是2次 ...

  5. C++primer 练习12.6

    编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值 保存在vector元素中.再将vector传递给另一个函数,打印读入的值.记得在恰 ...

  6. 21.Merge Two Sorted Lists(链表)

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  7. 共享池之八:软解析、硬解析、软软解析 详解一条SQL在library cache中解析涉及的锁

    先来张大图: 结合上图来说明一下解析的各个步骤涉及的锁. 软解析.硬解析.软软解析区别的简单说明: 为了将用户写的sql文本转化为oracle认识的且可执行的语句,这个过程就叫做解析过程. 解析分为硬 ...

  8. 使用升级版的 Bootstrap typeahead v1.2.2

    上次介绍了 Bootstrap 2 中附带的 typeahead,功能强大,但是使用起来不太方便,作者 Terry Rosen 已经升级了一个新版本 v1.2.2,作出了很大的改进. 下载地址 htt ...

  9. jad 反编译 jar包

    1.利用winrar解压缩jar包 或者CMD>jar -xvf test.jar -C classes 2.下载jad,利用jad反编译jar包 CMD>[jad_home]/jad.e ...

  10. windows常用运行命令收集(持续更新)

    快捷键打开运行窗口:Windows + R > calc(计算器) > gpedit.msc(本地组策略编辑器) > regedit(注册表) > mstsc(远程桌面) &g ...