Spring Web Flow 学习笔记(1)
1.Spring Web Flow 是Spring MVC的扩展,它支持开发基于流程的应用程序,它将流程的定义与实现流程的行为的类和视图分离开来。
2.尽管Spring web Flow是Spring框架的子项目,但它并不是Spring框架的一部分。
3.在Spring中使用Web Flow
(1)织入流程执行器
流程执行器驱动流程的执行,当用户进入一个流程时,流程执行器会为用户创建并启动一个流程执行实例,当流程暂停的时候,(如为用户展示视图的时候),流程执行器会在用户执行操作后恢复流程。创建流程执行器如下:
1 | <flow:flow-executor id= "flowExecutor" flow-registry= "flowRegistry" /> |
尽管流程执行器负责创建和执行流程,但它并不负责加载流程定义,这个责任落在流程注册表上
(2)配置流程注册表
流程注册表的的工作是加载流程定义并让流程执行器能够使用它们,代码如下:
1 2 3 | <flow: flow-registry id= "flowRegistry" base-path= "/WEB-INF/flows" > <flow:flow-location-pattern value= "*-flow.xml" /> </flow:flow-registry> |
注册表会在/WEB-INF/flows目录下查找流程定义,任何以-flow.xml的XML文件都将视为流程定义,所有的流程都会通过ID来进行引用。<flow:flow-location-pattern>定义的流程ID就是相对base-path的路径或者是星号代表的路径。
另一种方式,可以去除base-path属性,而是显示的声明流程定义的文件的位置:
1 2 3 | <flow: flow-registry id= "flowRegistry" > <flow:flow-location path= "WEB-INF/flows/login-flow.xml" /> </flow:flow-registry> |
流程的ID是从流程文件的文件名中获取的,这里就是login-flow。
如果希望更显示的指定流程ID,可以如下:
1 2 3 | <flow: flow-registry id= "flowRegistry" > <flow:flow-location id= "loginFlow" path= "WEB-INF/flows/login-flow.xml" /> </flow:flow-registry> |
(3)处理流程请求
我们需要FlowHandlerMapping来帮助DispatcherServlet将流程的请求发送给Spring Web Flow,在Spring应用上下文中,其配置如下:
1 2 3 | <bean class = "org.springframework.webflow.mvc.servlet.FlowHandlerMapping" > <property name= "flowRegistry" ref= "flowRegistry" /> </bean> |
FlowHandlerMapping仅仅是将流程请求定向到Spring Web Flow上,相应请求的是FLowHandlerAdapter,其等同于Spring MVC中的控制器。其配置如下:
1 2 3 | <bean class = "org.springframework.webflow.mvc.servlet.FlowHandlerAdapter" > <property name= "flowExecutor" ref= "flowExecutor" /> </bean> |
1 | <em id= "__mceDel" > </em> |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步