Получение обновленного значения через @ManagedProperty / уведомление других компонентов об обновленном значении свойства - PullRequest
1 голос
/ 13 июня 2011

У меня есть SessionScoped bean скажем UserSession, который содержит свойство String token, которое действует как аутентифицируемый токен для вошедшего в систему пользователя. Этот токен вводится в другие компоненты SessionScoped и ViewScoped, чтобы они могли использовать этот токен и выполнять какие-либо действия. У меня нет проблем с введением собственности.

Однако есть вариант использования, в котором token в самом UserSession заменяется другой строкой. И как только я это сделаю, другие компоненты будут ссылаться на старое значение token, что приведет к недопустимому доступу.

Как я могу уведомить другие бины об этом изменении значения? или мне получить экземпляр компонента через

FacesContext context = FacesContext.getCurrentInstance(); Application app = context.getApplication();<br> UserSession session = (UserSession) app.evaluateExpressionGet(context, "#{userSession}", UserSession.class);

А затем извлечь token как session.getToken()? Я использую Мохарру 2.0.4

1 Ответ

3 голосов
/ 13 июня 2011

Я не понимаю, почему это проблема.Это больше похоже на то, как будто вы копируете свойство, например:

@ManagedBean
@SessionScoped
private OtherBean {

    @ManagedProperty(value="#{userSession}")
    private UserSession userSession;

    private String token;

    @PostConstruct
    public void init() { 
        this.token = userSession.getToken();
    }

    public void someAction() {
        doSomethingWith(token);
    }

    public void otherAction() {
        doSomethingElseWith(token);
    }

    // ...
}

, в то время как вам лучше обращаться к нему напрямую:

    // ...

    public void someAction() {
        doSomethingWith(userSession.getToken());
    }

    public void otherAction() {
        doSomethingElseWith(userSession.getToken());
    }

    // ...

Исправьте свои бины соответствующим образом, чтобы избавиться отчастное свойство токена, которое содержит копию и позволяет всем методам получать ее непосредственно от внедренного компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...