0

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

  1. 显示.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")

    公共类 ABean { 私有布尔显示;

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

    }

这个项目是设置spring security 3.1.2和管理用户系统。

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

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

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

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

4

1 回答 1

0

I found solution for this problem. But I don't understand why can't use BalusC 's solution (I think it 's right, but...)
I use

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

So, everything work successfully. If you know, please let me know why it works when I use Scope from springframework.context.annotation package. Thank you!

于 2012-12-09T07:41:26.513 回答