JSF范围问题

时间:2011-01-25 13:47:11

标签: jsf scope jsf-2 communication javabeans

首先抱歉我的英语。我把我的问题放在各种德语论坛中,但我没有得到答案:-(也许你可以帮助我。

我使用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。但为什么? 你能解释一下我的错吗?

此致 约翰尼

1 个答案:

答案 0 :(得分:0)

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

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

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

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