Задача JSF Scope - PullRequest
       28

Задача JSF Scope

0 голосов
/ 25 января 2011

прежде всего извините за мой английский. Я поставил свой вопрос на различных немецких форумах, но я не получил ответа :-( возможно, вы мне поможете.

Я работаю с JSF 2.0. Мы должны создать веб-приложение, которое подключается к бэкэнд-серверу, где хранится вся информация - это не проблема.

Моя проблема заключается в следующем: У меня есть например 2 пользователя. Пользователь 1 входит в систему -> сообщение отправляется на внутренний сервер -> будет получено сообщение с информацией о пользователе -> идентификатор пользователя будет установлен в 1 Пользователь 2 входит в систему -> ... -> идентификатор пользователя будет установлен на 2. НО идентификатор пользователя 1 также будет установлен на 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);
}

Пользовательский класс - это просто простой класс с методами получения / установки и тремя полями: имя пользователя, пароль и sessionid.


Если на мой сайт зашли два пользователя, я думал, что для каждого пользователя будет создан новый жизненный цикл с новыми экземплярами моих сессионных компонентов. Но .. здесь мои пользователи, кажется, разделяют только один компонент. Но почему? Можете ли вы объяснить мне, где моя вина?

С уважением Джонни

1 Ответ

0 голосов
/ 25 января 2011

Проблема, по-видимому, в области действия переменной user - как она регистрируется в контексте? Что еще более важно, какова его область применения? Вот где вы должны искать причину проблемы.

Уточнение: Я вижу вашу проблему здесь:

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

Что такое #{user}? Где это определено? С этим именем должен быть управляемый компонент, или он должен быть добавлен в контекст другим способом. Проблема заключается в том, что он имеет область применения. Контекстные переменные могут иметь все виды областей, а не только область сеанса.

...