【问题标题】:JSF Scope problemJSF 范围问题
【发布时间】:2011-01-25 13:47:11
【问题描述】:

首先对不起我的英语。我在各种德语论坛上提出了我的问题,但我没有得到答案:-(也许你可以帮助我。

我使用 JSF 2.0。我们必须创建一个连接到存储所有信息的后端服务器的 Web 应用程序 - 这没问题。

我的问题是这个: 我有例如2个用户。 用户 1 登录系统 -> 一条消息被发送到后端服务器 -> 将收到带有用户信息的消息 -> 用户 ID 将设置为 1 用户 2 登录系统 -> ... -> 用户 ID 将设置为 2。 但是用户 1 的 ID 也将设置为 1。 这意味着两个用户共享我的 User 类的一个实例? 我认为每个用户都有自己的 java 类实例,其中只存储了 HIS 信息。

这里有一段代码:

login.xhtml

<h:body>
<f:view>
<h:inputText id="name" value="#{user.name}" />
<h:inputSecret id="passwort" value="#{user.password}" />
....
<h:commandButton id="login" action="#{communicator.validate}" />

您输入用户和密码,通信器向后端发送消息并接收此消息。

Communicator.java

@ManagedBean(name = "communicator")
@SessionScoped
public class Communicator implements EventReceiver {

    @ManagedProperty(value = "#{user}")
    private User user;

    private BackendEvent backendEvent;

validate();
login();

    public void setUser(User user) {
        this.user = user;
    }


    public User getUser() {
        return this.user;
    }

现在将收到来自后端的消息,其中包含所有用户信息:

private void handleLoginTell(LoginTell loginTell) {
    logger.addToLog("handle LoginTell");
    user.setSessionId(loginTell.getSessionId());
    user.setName(loginTell.getLogin());
    user.setLogged(true);
}

用户类只是一个简单的类,包含 getter/setter 方法和三个字段:用户名和密码以及 sessionid。


如果有两个用户访问我的网站,我认为将为每个用户创建一个新的生命周期,其中包含我的 sessionscoped bean 的新实例。 但是.. 在这里,我的用户似乎只共享一个 bean。但为什么? 你能解释一下我的错在哪里吗?

问候 强尼

【问题讨论】:

    标签: jsf scope jsf-2 communication javabeans


    【解决方案1】:

    问题显然是user 变量的范围——那么它是如何在上下文中注册的呢?更重要的是,它的范围是什么?这就是您应该寻找问题原因的地方。

    澄清:我在这里看到了您的问题:

    @ManagedProperty(value = "#{user}")
    private User user;
    

    #{user} 是什么?它在哪里定义?必须有一个使用该名称的托管 bean,或者必须以其他方式将其添加到上下文中。问题是它似乎具有应用范围。上下文变量可以有各种范围,而不仅仅是会话范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2011-09-19
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多