我刚开始学习 JSF,我想知道这个问题。我有 16 个复选框。当我打开页面并且我的兄弟也在打开它时,似乎我们有相同的会话。当我单击其中一个复选框时,它也会在我的兄弟浏览器上被选中。选中的复选框保存在private ArrayList<String> selectedBoes = new ArrayList<String>();
My ManagedBean 的 SessionScoped 中。
为什么会发生这种情况以及如何避免?
我兄弟的会话 ID 是
cdbbb126e96060ddb924b9d5e591
. 我的是cd9a5c4180bd9dfef0ec8db2ac4d
那么唯一可能的原因是你实际上是没有将它们存储在会话范围内。症状表明您要么将它们存储在应用程序范围内,要么甚至声明了它static
(因此问题中的代码根本不代表真正的代码;您注释中的代码表明也更少或更多,您使用了不同的属性名称,显然您试图从头顶输入它,您不应该这样做,您应该复制粘贴真实代码)。
请注意,当您使用 CDI@Named
而不是 JSF@ManagedBean
时,它将默认为应用程序范围,除非使用javax.enterprise.context
范围注释另外指定。因此,如果您使用javax.faces.bean.SessionScoped
CDI 不支持的 JSF 自己的注释,那么它仍然在应用程序范围内。