Spring WebFlow在代码执行方面如何工作?

时间:2018-09-09 16:02:22

标签: spring-webflow

我是Spring Webflow的新手,我正在Internet上阅读代码和解释。我对spring webflow应用程序中的代码执行流程有基本的疑问。 据我所知,流请求被映射到flow.xml文件(我现在知道FlowHandlerAdapter,FlowHandlerMapping和FlowRegistry)。流xml文件中的起始状态(如果为视图状态)将呈现视图。 例如-

<?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">
        <transition on="proceed" to="reviewBooking" />
        <transition on="cancel" to="bookingCancelled" bind="false" />
    </view-state>

    <view-state id="reviewBooking">
        <transition on="confirm" to="bookingConfirmed">
            <evaluate expression="bookingService.persistBooking(booking)" />
        </transition>
        <transition on="revise" to="enterBookingDetails" />
        <transition on="cancel" to="bookingCancelled" />
    </view-state>

    <end-state id="bookingConfirmed" />

    <end-state id="bookingCancelled" />

</flow>

在这里,当执行流文件时,具有ID的第一个视图状态-“ enterBookingDetails”将呈现视图enterBookingDetails.xhtml。

控件现在是否进入视图页面enterBookingDetails.xhtml并等待用户事件?在用户单击“继续”按钮之后,控件返回到流XML文件,并执行<transition>元素以转换为reviewBooking视图状态?

我正确地理解,流程执行被暂停直到用户事件发生,并且在用户事件发生时,控制权从网页转到流程xml文件,并执行转换并转换为相应状态。

1 个答案:

答案 0 :(得分:0)

是的,您的理解基本上是正确的。 Spring Web Flow框架呈现视图,然后一旦接收到下一个动作“进行”,它将转换为“ reviewBooking”状态,在此状态下它将基本上暂停直到下一个用户动作。执行是基于状态从一个状态到另一个状态的转移,以逐步完成整个流程。

注意:您还可以在自己的流中重复使用其他Web流xml文件中定义的流。这使框架非常强大。