我有3个不同的页面,我使用用户列表。
第一页包含来自一个会话范围管理bean的用户的dataTable。在那个页面上,我可以更改选定的用户详细信息。
第二页也包含有用户的dataTable,但是来自不同的会话作用域bean。在这个页面上,我也从dataTable(用户列表)和数据库中删除用户。
我意识到这不是一个好主意,因为如果我对一个用户进行了更改,那么这些更改将不会显示在我删除用户的页面。
只有用户列表的应用程序范围bean是一个解决方案吗?
只有用户列表的应用程序范围bean是一个解决方案吗?
不,它不会解决你所面临的问题,毕竟你会遇到并发问题,因为web应用程序通常是一个多用户环境,你需要让所有的synchronized
来防止讨厌的ConcurrentModificationException
之类的。应用程序作用域bean在web应用的所有用户之间共享。在应用程序作用域bean中保存请求/视图作用域的数据是没有意义的,即使会话作用域太广。
你的问题是会话范围太广了。您希望在每个新的GET请求时刷新列表。实现这一点的最佳方法是将bean放在请求或视图作用域中。编辑用户详细信息的bean可以是另一个bean,但是当您不想将编辑页面作为一个可书签GET请求时,它也可以很容易地成为第一个bean的一个属性。
参见:
- 保留视图之间的bean值
- 如何选择合适的bean scope?