首先抱歉我的英语。我把我的问题放在各种德语论坛中,但我没有得到答案:-(也许你可以帮助我。
我使用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。但为什么? 你能解释一下我的错吗?
此致 约翰尼
答案 0 :(得分:0)
问题显然是user
变量的范围 - 那么它是如何在上下文中注册的?更重要的是,它的范围是什么?那是你应该寻找问题原因的地方。
澄清:我在这里看到你的问题:
@ManagedProperty(value = "#{user}")
private User user;
什么是#{user}
?它在哪里定义?必须有该名称的托管bean,或者必须以其他方式将其添加到上下文中。问题是它似乎有应用范围。上下文变量可以包含各种范围,而不仅仅是会话范围。