JSF PrimeFaces теряет данные и сессию - PullRequest
3 голосов
/ 12 января 2012

Я занимаюсь разработкой приложения с JSF и PrimeFaces.У меня был управляемый сеанс, который имеет имя пользователя, пароль и isUserLoggedIn.Когда я обрабатываю компонент входа, он работает и соответственно меняет мою страницу.Как только я перехожу на другую страницу, я теряю данные об имени пользователя.Мне нужно получить доступ к имени пользователя в течение всего приложения.Кто-нибудь знает, почему я теряю данные, которые должны Eb сессии области?почему я скрываю это от одной страницы, а не для других?Спасибо

import authentication.AuthenticatorManagerLocal;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@SessionScoped
public class UserMB {
    @EJB
    private AuthenticatorManagerLocal authenticatorManager;

    /** Creates a new instance of UserMB */
    public UserMB() {
    }

    Boolean isUserLoggedIn;
    String username;
    String password;
    String nickName;

    public String getNickName() {
        nickName="vanessa";
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public Boolean getIsUserLoggedIn() {
        return isUserLoggedIn;
    }

    public void setIsUserLoggedIn(Boolean isUserLoggedIn) {
        this.isUserLoggedIn = isUserLoggedIn;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String authenticateUser(){
       isUserLoggedIn= authenticatorManager.authenticateUser(username, password);
       if(isUserLoggedIn)return "Home";
       else
           return null;
    }

    public void logout(){
        isUserLoggedIn=false;
        username="";
        password="";
    }

    public String goToIndex(){
        return "Index";
    }

}

HOME имеет

<p:commandButton value="SearchCB" action="#{expSearchResultsMB.search()}" ajax="false" />  

внутри пользовательского компонента

expSearchResultsMB.search () отправляет SearchResults, где я хочу отобразить имя пользователя

 <h:outputLabel value="#{userMB.username}" /> 

Мне нужно получить доступ к имени пользователя и isUSerLoggedin на каждой странице приложения.Когда я проверяю, вошел ли пользователь в систему, я запускаю Home, если он есть.Главная показывает имя пользователя правильно, но когда из дома я использую searchCB, целевая страница SearchResults не отображает имя пользователя.

Может кто-нибудь помочь?

1 Ответ

4 голосов
/ 12 января 2012
import javax.enterprise.context.SessionScoped;

Вы импортировали неправильную аннотацию для области сеанса. Если вы используете JSF @ManagedBean, вам необходимо импортировать области из пакета javax.faces.bean. Выше указано только для CDI @Named.

Итак, исправьте это соответствующим образом:

import javax.faces.bean.SessionScoped;

A @ManagedBean без нужной области действия будет вести себя как @NoneScoped. То есть при каждой оценке EL будет создаваться новый экземпляр, что является именно тем проблемным поведением, которое вы видите.

...