2

我用@FlowScoped bean 做了一个小实验,据我所知,它的目的是更容易地创建“向导型”Web 应用程序,逐渐在一系列页面上累积数据,然后,一旦所有数据准备就绪,编写它到持久存储(这只是一个例子,当然没有什么可以阻止在中间步骤期间写入持久存储)。正如我所看到的,对@FlowScoped bean 的调用是不同步的,因此原则上可能会破坏存储在 bean 中的数据(通过双重提交,或以任何其他方式启动两个几乎同时的 HTTP 请求,它调用 bean 的方法)。这与同步调用的 @ConversationScoped bean 不同。

令我困惑的是,关于@SessionScoped bean,我发现了几个链接,这些链接谈到需要同步对 @SessionScoped bean 的访问(或者建议根本不使用它们,除了很少更改的用户数据),但我有没有找到关于 @FlowScoped bean 的任何类似内容。

那么,什么被认为是使用 @FlowScoped bean 的“最佳实践”?我错过了什么吗?

编辑

@FlowScoped 至少对我来说似乎部分受到 Spring WebFlow 的激励,我有一些经验,据我所知,它提供了与 JSF 2 的集成(似乎并非所有 JSF 2.2 功能都已实现,但它例如,似乎 PrimeFaces 是可用的)。我知道 Spring WebFlow + JSF 实际上是在“现实世界”应用程序中使用的,流范围对象的线程安全问题与双重提交问题一起被优雅地处理(流执行 ID 必须随每个 HTTP 请求提供,并且它过期并在调用 Spring WebFlow“动作”方法的 HTTP 请求后返回一个新的方法:因此不能同时为同一用户和流 ID 调用多个“动作”方法)。

所以我想了解,如果我希望使用 @FlowScoped bean 来构造应用程序“流”(不使用 Spring WebFlow),那么在 JSF 2.2 的情况下,最佳实践是什么。我真的需要自己同步对@FlowScoped bean的访问,还是有一些标准的方法来处理这些问题?

4

0 回答 0