我在托管bean JSF 2.0中使用属性时遇到了麻烦。
display.xhtml
<p:commandButton value="Show" actionListener="#{ABean.ajaxShow}" update="info" />
<p:commandButton value="Hide" actionListener="#{ABean.ajaxHide}" update="info" />
<p:outputPanel id="info">
<p:fieldset rendered="#{ABean.show}">
Info
</p:fieldset>
</p:outputPanel>
ABean.java
@Named( “ABean”)
public class ABean { private boolean show;
public void ajaxShow() {
show = true;
}
public void ajaxHide() {
show = false;
}
//getter setter
}
该项目设置弹簧安全3.1.2并管理用户系统。
当有2个用户登录并打开此页面时,用户1单击“显示”按钮,然后显示“信息”。因此,当用户2转到此页面时,他会看到显示的信息。如果用户2单击“隐藏”按钮,则信息将隐藏。刷新用户1访问的页面,信息隐藏。
这很奇怪。当用户1单击按钮时,我需要页面用户1访问仅更改信息状态(显示/隐藏),而不是由用户2在用户2的页面上引起。
我认为这是因为2个用户的2个会话仅使用1个托管bean实例。我该怎么办?请帮我解决,谢谢!
PS:我尝试为ABean添加@SessionScoped,@ ViewScoped,@ RequestScoped,但没有任何改变。
答案 0 :(得分:0)
我找到了解决这个问题的方法。但我不明白为什么不能使用BalusC的解决方案(我认为这是对的,但......) 我用
import org.springframework.context.annotation.Scope;
@Named
@Scope("request") // or use session,..
所以,一切顺利。如果您知道,请在使用springframework.context.annotation包中的Scope时告诉我它为什么有效。谢谢!