星期五 2006年03月17日
Spring Web Flow Quick Start 翻译
Quick Start
Added by Keith Donald, last edited by Keith Donald on Mar 15, 2006 (view change)
原文地址http://opensource2.atlassian.com/confluence/spring/display/WEBFLOW/Quick+Start
这个Quick Start是帮住你快速开始使用Spring Web Flow 1.0
这个文档假定你已经下载了一份Spring Web Flow 1.0 EA 和 the Spring Framework,以及你有基本的了解Spring,HTML和JSP/JSTL。另外的,熟悉有限状态机和UML状态图。
下面使用一个简单的例子一步步示范实现你的第一个FLOW
1、确保spring-webflow-1.0.jar 和 spring-binding-1.0.jar 在你的Classpath下,当然你也需要Spring FrameWork1.2.7或者以后版本的核心包,当然可以为了方便而使用all-in-one的spring.jar在你的ClassPath下。
2、设计你的第一个FLOW,为了这个Quick Start,假定一个简单的流程,明确这个Flow必须
(如果你熟悉Spring MVC,上面的就等价于SimpleFormController的流程)
3、创建你的工作流定义,这里展示如何在xml中定义流程
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE flow PUBLIC "-//SPRING//DTD WEBFLOW 1.0//EN" "http://www.springframework.org/dtd/spring-webflow-1.0.dtd"> <flow start-state="displayForm"> <view-state id="displayForm" view="form"> <entry-actions> <action bean="formAction" method="setupForm"/> </entry-actions> <transition on="submit" to="processSubmit"> <action bean="formAction" method="bindAndValidate"/> </transition> </view-state> <action-state id="processSubmit"> <action bean="formAction" method="processSubmit"/> <transition on="success" to="finish"/> </action-state> <end-state id="finish" view="success"/> </flow>
4、创建你的第一个flow action,这里展示在上面提及的包含form setup,bing和validate已经submitlogic的formAction。
public class MyFormAction extends FormAction { public MyFormAction() { setFormObjectClass(FormObject.class); } private static class FormObject implements Serializable { private String data; public void String getData() { return data; } public void setData(String data) { this.data = data; } } /** * A "submit" hook: an action execute method, called after * binding and validation. */ public Event processSubmit(RequestContext context) throws Exception { FormObject formObject = (FormObject)getFormObject(context); // do submit logic return success(); } }
5、使用Spring Application Context配置你的第一个webflow ,在这里你选择使用XmlFlowRegistryFactoryBean,去创建一个注册来包含从上面的xml资源创建流程,已经配置你的formaction。
<bean id="flowRegistry" class="org.springframework.webflow.registry.XmlFlowRegistryFactoryBean"> <property name="flowLocations" value="/WEB-INF/flows/myflow.xml"/> </bean> <bean id="formAction" class="example.MyFormAction"/>
6、使用你喜欢的web framework完成webflow,如果你使用spring mvc,定义一个FlowController
<bean name="/myApp.htm" class="org.springframework.webflow.executor.mvc.FlowController"> <property name="flowLocator" ref="flowRegistry"/> </bean>
上面定义/myApp.html这个URL和上面定义的flowController的对应关系。一个Controller就可以管理执行所有的在一个webapp中定义flow,flow执行的时候是一个叫做_flowId的参数来开始一个新的flow
7、创建那些参与这个flow的views (aka pages)
<html> <head> <title>My Form</title> </head> <body> <p> <table> <form action="myApp.htm"> <tr> <td>Field:</td> <td><input type="text" name="data" size="25"/></td> </tr> <tr> <td colspan="2" align="right"> <input name="_eventId_submit" type="submit"> <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"> </td> </tr> </form> </table> </p> </body> </html>
注意:flows是有状态的,所以,一个页面参与一个flow必须提交一个 _flowExecutionKey 参数给服务器来区别那个流程是客户端参与的,另外,一个流程必须提交一个叫_eventId的参数给服务器表示那个event发生当客户端某个事件发生的时候,比如“submit”是submit按钮被按下的时候发生的事件。
8、最后,访问这个流程,在这个案例中,我们可以简单的使用/myApp.htm?_flowId=myFlow 这个url来访问。当我们访问这个,在服务端将创建一个新的“myflow”FlowExecution,并且转换到他的start-state,然后,以下的一些处理将可能发生
1、view form被展示
2、用户点击提交按钮,一个有'submit'信号的事件发生,完成客户端操作
3、服务端接收到“submit”事件,执行MyFlowAction中bingAndValidate方法,然后返回一个结果(比如:success,或者error)
4、这个操作的结果触发另一个转变,比如回到“displayForm”在错误发生的时候,或者在成功的时候提交表单
5、processSubmit状态触发在MyFlowAction中的processSubmit方法,然后返回结果
6、如果这个submit成功结束,这个流程结束,显示最后的成功view
正如你所见,一个flow完全的在上面定义。Action实现全部执行命令已经逻辑在请求发生的时候,返回一个合理的结果给flow展示。
终于完成了这个Quick Start,一个简单的介绍Spring Web Flow系统,一个好的地方去学习更多的关于Spring Web Flow是reference文档和支持论坛。另外的一个方法是多看看例子,就在分发包的spring-webflow-samples文件夹,可以查看readme.txt,那里介绍如何编译和配置这些例子程序
终于完成了我自己的第一个翻译的文章,呵呵,大家不要见笑,我知道有很多都是我乱写的地方,只是想给自己看完后留个纪念,当然存在一些我理解错误的地方,请大家参照原文凑合者看
powered by @_@/blog.matrix
Posted at 11:02上午 三月 17, 2006 by zhenggc in Java | 评论[0]