JSF 2:阻止会话用户登录之间的共享托管bean

时间:2012-12-07 19:28:39

标签: jsf-2

我在托管bean JSF 2.0中使用属性时遇到了麻烦。

  1. 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>
    
  2. ABean.java

    @Named( “ABean”)

    public class ABean {     private boolean show;

    public void ajaxShow() {
        show = true;
    }
    
    public void ajaxHide() {
        show = false;
    }
    
    //getter setter
    

    }

  3. 该项目设置弹簧安全3.1.2并管理用户系统。

    当有2个用户登录并打开此页面时,用户1单击“显示”按钮,然后显示“信息”。因此,当用户2转到此页面时,他会看到显示的信息。如果用户2单击“隐藏”按钮,则信息将隐藏。刷新用户1访问的页面,信息隐藏。

    这很奇怪。当用户1单击按钮时,我需要页面用户1访问仅更改信息状态(显示/隐藏),而不是由用户2在用户2的页面上引起。

    我认为这是因为2个用户的2个会话仅使用1个托管bean实例。我该怎么办?请帮我解决,谢谢!

    PS:我尝试为ABean添加@SessionScoped,@ ViewScoped,@ RequestScoped,但没有任何改变。

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。但我不明白为什么不能使用BalusC的解决方案(我认为这是对的,但......) 我用

import org.springframework.context.annotation.Scope;  
@Named
@Scope("request") // or use session,..

所以,一切顺利。如果您知道,请在使用springframework.context.annotation包中的Scope时告诉我它为什么有效。谢谢!