返回介绍

8.2.3 流程数据

发布于 2024-08-17 00:45:50 字数 2377 浏览 0 评论 0 收藏 0

如果你曾经玩过那种老式的基于文字的冒险游戏的话,那么当从一个地方转移到另一个地方时,你会偶尔发现散布在周围的一些东西,你可以把它们捡起来并带上。有时候,你会马上需要一件东西。其他的时候,你会在整个游戏过程中带着这些东西而不知道它们是做什么用的——直到你到达游戏结束的时候才会发现它是真正有用的。

在很多方面,流程与这些冒险游戏是很类似的。当流程从一个状态进行到另一个状态时,它会带走一些数据。有时候,这些数据只需要很短的时间(可能只要展现页面给用户)。有时候,这些数据会在整个流程中传递并在流程结束的时候使用。

声明变量

流程数据保存在变量中,而变量可以在流程的各个地方进行引用。它能够以多种方式创建。在流程中创建变量的最简单形式是使用<var>元素:

这里,创建了一个新的Customer实例并将其放在名为customer的变量中。这个变量可以在流程的任意状态进行访问。

作为行为状态的一部分或者作为视图状态的入口,你有可能会使用<evaluate>元素来创建变量。例如:

在本例中,<evaluate>元素计算了一个表达式(SpEL表达式)并将结果放到了名为toppingsList的变量中,这个变量是视图作用域的(我们将会在稍后介绍关于作用域的更多概念)。

类似地,<set>元素也可以设置变量的值:

<set>元素与<evaluate>元素很类似,都是将变量设置为表达式计算的结果。这里,我们设置了一个流程作用域内的pizza变量,它的值是Pizza对象的新实例。

当我们在8.3小节开始构建真实工作的Web流程时,你会看到这些元素是如何具体应用在实际流程中的。但首先,让我们看一下变量的流程作用域、视图作用域以及其他的一些作用域是什么意思。

定义流程数据的作用域

流程中携带的数据会拥有不同的生命作用域和可见性,这取决于保存数据的变量本身的作用域。Spring Web Flow定义了五种不同作用域,如表8.2所示。

表8.2 Spring Web Flow的作用域

范  围

生命作用域和可见性

Conversation

最高层级的流程开始时创建,在最高层级的流程结束时销毁。被最高层级的流程和其所有的子流程所共享

Flow

当流程开始时创建,在流程结束时销毁。只有在创建它的流程中是可见的

Request

当一个请求进入流程时创建,在流程返回时销毁

Flash

当流程开始时创建,在流程结束时销毁。在视图状态渲染后,它也会被清除

View

当进入视图状态时创建,当这个状态退出时销毁。只在视图状态内是可见的

当使用<var>元素声明变量时,变量始终是流程作用域的,也就是在定义变量的流程内有效。当使用<set>或<evaluate>的时候,作用域通过name或result属性的前缀指定。例如,将一个值赋给流程作用域的theAnswer变量:

到目前为止,我们已经看到了Web流程的所有原材料。是时候将其组装起来形成一个成熟且完整功能的Web流程了。当我们这样做的时候,请睁大你的眼睛观察,比如我是如何将数据存储在各作用域的变量中的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文