7. 行动

大多数流程需要表达的不仅仅是视图导航逻辑。 通常,他们还需要调用应用程序的业务服务或其他作。spring-doc.cadn.net.cn

在流程中,你可以执行多个作:spring-doc.cadn.net.cn

动作通过简洁表达式语言定义。 默认情况下,Spring Web Flow 使用统一的 EL。 接下来的几个章节涵盖了定义动作的基本语言要素。spring-doc.cadn.net.cn

7.1. 该评价元素

最常用的动作元素是评价元素。 这评价元素在流程中的某个点评估表达式。 通过这个单一元素,你可以调用Spring Beans或其他流量变量的方法。 以下列表展示了一个示例:spring-doc.cadn.net.cn

<evaluate expression="entityManager.persist(booking)" />

7.1.1. 赋值评价结果

如果表达式返回一个值,该值可以保存在流的数据模型中,称为flowScope(流控镜)如下:spring-doc.cadn.net.cn

<evaluate expression="bookingService.findHotels(searchCriteria)" result="flowScope.hotels" />

7.1.2. 转换评价结果

如果表达式返回的值可能需要转换,你可以通过以下方式指定所需的类型结果类型属性,具体如下:spring-doc.cadn.net.cn

<evaluate expression="bookingService.findHotels(searchCriteria)" result="flowScope.hotels"
          result-type="dataModel"/>

7.2. 检查点:流程动作

你应该查看带有以下作的示例预订流程:spring-doc.cadn.net.cn

<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
                          https://www.springframework.org/schema/webflow/spring-webflow.xsd">

    <input name="hotelId" />

    <on-start>
        <evaluate expression="bookingService.createBooking(hotelId, currentUser.name)"
                  result="flowScope.booking" />
    </on-start>

    <view-state id="enterBookingDetails">
        <transition on="submit" to="reviewBooking" />
    </view-state>

    <view-state id="reviewBooking">
        <transition on="confirm" to="bookingConfirmed" />
        <transition on="revise" to="enterBookingDetails" />
        <transition on="cancel" to="bookingCancelled" />
    </view-state>

    <end-state id="bookingConfirmed" />

    <end-state id="bookingCancelled" />

</flow>

该流现在产生预订当它开始时,对象在流域中。 预订酒店的ID是通过流输入属性获得的。spring-doc.cadn.net.cn