Spring WebFlow :重用与抽象框架 2

2008-05-24 05:35:47.0     浏览:301     来源:http://www.devx.com
关键词:

WebFlow的核心组件
一个Spring WebFlow应用中包含一个或多个流程,通常每个流程包括执行Action的动作状态(ActionStates),显示状态(ViewStates),跳转动作(Transitions).

流程
一个流程是一个预先定义好的用户交互行为的集合,表示为一个由动作状态和显示状态构成的树,状态之间通过跳转联系.
下面的登录注册是一个webflow的例子,包含了一些典型的构件,例如loginForm,ActionState,transition.这些构件通过一个XML文件描述:
<?xml version=??1.0?? encoding=??UTF-8???>

<!DOCTYPE webflow PUBLIC ??-//SPRING//DTD WEBFLOW//EN??<BR> ??http://www.springframework.org/dtd/spring-webflow.dtd??>
<webflow id=??LoginSequence?? start-state=??loginForm??>

<action-state id=??loginForm??>
<action bean=??loginFormAction??/>
<transition on=??success?? to=??formView??/>
</action-state>
...
<view-state id=??formView?? view=??enterCredentials??>
<transition on=??submit?? to=??bindAndValidateForm??/>
</view-state>
...
<end-state id=??successView?? view=??displayMain??/>
这个流程以loginForm开始,以"successView"结束(修饰主页面"displayMain" 的组件.流程可以通过XML文档配置,或者AbstractFlowBuilder的子类.

动作状态(ActionStates)

ActionStates对用户事件或其他事件进行响应.ActionStates自身又可以包含其他可执行的Action和transition.下面的代码配置了"loginForm"这个ActionState.


<action-state id=??loginForm??>
<action bean=??loginFormAction??/>
<transition on=??success?? to=??formView??/>
</action-state>

动作(Actions)

Action是ActionState可以连接,重用,声明调用的最小单位.Action继承自AbstractAction类,该类实现了doExecuteAction方法.这个方法的参数:RequestContext,WebFlow(其中封装了所有流程相关的数据).loginForm动作状态通过Spring的自动装配特性调用LoginFormAction动作.doExecute
Action方法被自动调用,同时可以处理一些登录准备,预先装入等操作.

  1. public LoginFormAction extends AbstractAction{
  2. protected Event doExecuteAction(RequestContext context)
  3. throws java/lang/Exception.java.html" target="_blank">Exception{
  4. //perform some login specific setup operations
  5. ...
  6. }//end method
  7. }//end class


显示状态(ViewState)

ViewState初始化对显示组件(jsp,tile等)的修饰操作.下面是一个ViewState的配置代码
<view-state id=??formView?? view=??enterCredentials??>
<transition on=??submit?? to=??bindAndValidateForm??/>
</view-state>
当来自loginForm的ActionState返回一个"success"时,这个ViewState将会被调用.它将修饰"enterCredentials"显示组件(可以是一个常见的struts forward).

跳转(Transition)

和通常的状态机一样,WebFlow定义了状态以及状态之间跳转动作.这些跳转动作很类似struts中的ActionForward.同样是负责连接两个状态.

后继动作(Continuation)

后继动作(Continuation)允许你回退并重新开始程序执行流程 -- 从程序执行的角度来看是一个适时的逆流程.Continuation的概念最早来自编程语言,但是却从来没有被用于像Java,VB,C++这样主流的编程语言中.WebFlow创造性地实现了continuation.由于continuation可以用来持久和重造任何一个流程状态,从而提供给你极大的自由.