在 JSF、EJB 和 JPA 中创建 Web 应用程序时,我们遇到了一个思想问题。
我们的示例情况是:
管理员在数据表中显示用户列表。接下来,他选择 user1,这会将他带到新的用户版站点。如果他尝试打开第二张卡或窗口并在同一会话中选择 user2 进行同时编辑,则会出现此问题。当我们尝试在编辑后保存 user1 数据时,这是不可能的,因为它在 Endpoint 中被 user2 覆盖。
数据存储:因为我们没有在项目的视图部分存储任何数据[下图可用],在显示它之后,托管 Bean 被销毁。因此,在控制器部分,我们决定将当前选择的用户保留为 Endpoint [Stateful EJB Bean] 中的一个字段,该字段对于会话来说是恒定的,因为它由 Session Scoped Managed Bean 持有。我们认为我们不应该在 Endpoint 或 Session Scope Managed Bean 中存储任何集合。
问题:特殊情况是对情况的概述。在我们的应用程序中,我们希望在会话期间编辑多个相同类型的实体。
问题:我们应该在哪里以及如何存储用户/管理员的当前选择,这会导致该选定实体的版本。
在视图中存储数据,请求范围部分允许我们在同一个会话中控制多个实体,尽管我们认为这不是合适的方法。但是现在将其存储在控制器部分会导致限制在同一会话中编辑一个相同类型的实体。
图表在这里:http: //i.stack.imgur.com/9PyYr.jpg