-1

我想要的在下面实现,我将有三个页面。

userList.xhtml:这将有一个数据表中的用户列表。Onclicking用户,我将在下一页(detailsOfUser.xhtml)中看到各个用户的详细信息

detailsOfUser.xhtml:此页面将包含在上述页面中被点击的用户的详细信息。在此页面上,我将有一个Edit按钮,单击该按钮后,我将在下一页的文本字段中获得相同的值(editUserDetails.xhtml)

editUserDetails.xhtml:带有上一页用户详细信息的文本字段。在此页面上,我将有Save按钮,单击该按钮我将被重定向回detailsOfUser.xhtml我将看到相应用户更新值的位置。

我应该如何为这些 bean 使用 bean 和范围?

我应该为所有三个页面使用一个 bean 还是使用三个具有不同范围的 bean?

4

3 回答 3

1

我将为userList.xhtml制作一个 bean(可能是 ViewScope) 。如果你的应用程序很小并且你喜欢简单,你也可以考虑制作这个 SessionScope。

For detailsOfUser.xhtml and editUserDetails.xhtml I will use another bean, which would have to be ConversationScoped or if you have the option of using MyFaces CODI (which I highly recommend), you can give them ViewAccessScope which is like an automatic Conversation scope.

This would allow you to write it in the easy and correct way. I understand that you are sharing information between detailsOfUser.xhtml and editUserDetails.xhtml.

Extra information- the ViewScope is problematic and you may need to have Seam or MyFaces CODI anyway to get it working.

于 2013-02-28T13:03:10.840 回答
0

我更喜欢使用 Viewscope 甚至 Requestscope,因为您不需要更长时间的数据。您只需要它来查看并通过单个 xhtml 文件传递​​它。
所以我更喜欢一个带有 Viewscope 的 Bean。

于 2013-02-28T13:02:27.043 回答
0

UserListBean可以是 RequestScoped 或 ViewScoped(CDI 中的 ConversationalScoped),取决于您是否要对表执行一些操作(即排序、过滤……)

UserDetailBean将是 RequestScoped,因为您只需要查看详细信息即可。

EditUserDetailBean再次是 RequestScoped 因为您不需要在请求期间维护任何数据

或者您也可以制作一个 SessionScoped bean 并将所有内容都放在那里,但我真的不推荐这样做,您不希望 session 太大。

所以更一般地说 - 请求期间不需要维护任何数据的页面的请求范围,当您需要存储有关页面上正在发生的事情的数据时查看范围(例如数据表过滤),用于存储会话范围的会话范围像登录用户或购物车这样的数据,最后是用于存储应用程序范围内容的应用程序范围(如配置,它用作单例 bean)。

另请参阅BalusC 的这篇文章,他很好地描述了这一切。

于 2013-02-28T13:03:04.490 回答