JSF 2 проблема перенаправления - PullRequest
3 голосов
/ 23 мая 2011

У меня в компоненте поддержки есть два следующих метода:

public String validateUser() {
    FacesContext facesCtx = FacesContext.getCurrentInstance();

    if(userName.equals("user1") && password.equals("pass1")) {
        User user = new User();
        user.setUserName(userName);
        HttpSession session = (HttpSession) facesCtx.getExternalContext().getSession(false);
        session.setAttribute(User.SESSION_ATTRIBUTE, user);
        return "secured/home.jsf?faces-redirect=true";
    }

    if(!userName.equals(LoginBean.USERNAME)) {
        FacesMessage msgForUserName = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username did not match.", null);
        facesCtx.addMessage("loginForm:userName", msgForUserName);
    }

    if(!password.equals(LoginBean.PASSWORD)) {
        FacesMessage msgForPassword = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Password did not match.", null);
        facesCtx.addMessage("loginForm:password", msgForPassword);
    }

    return null;
}

public String logout() {
    logger.info("Logging out .........................................");
    FacesContext facesCtx = FacesContext.getCurrentInstance();
    HttpSession session = (HttpSession) facesCtx.getExternalContext().getSession(false);
    session.invalidate();
    return "login.jsf?faces-redirect=true";
}

Я не знаю, почему перенаправление работает в первом методе (то есть validateUser ()), но во втором не работаетметод (т.е. выход из системы ()).Код внутри метода выхода из системы фактически выполняется, сеанс также становится недействительным, но каким-то образом браузер остается на той же странице.И я использую PrimeFaces p: commandButton и ajax включен на них обоих.Любая, любая идея?Спасибо.

1 Ответ

5 голосов
/ 23 мая 2011

но браузер почему-то остается на той же странице. И я использую PrimeFaces p: commandButton и ajax включен на обоих из них

Я бы не ожидал, что это потерпит неудачу. Я подозреваю, что это как-то связано с недействительным сеансом. Попробуйте с ajax="false" на <p:commandButton>.


Не связанная с проблемой, вы должны попытаться минимизировать импорт javax.servlet в ваших управляемых bean-компонентах JSF. Они часто указывают на то, что вы делаете вещи не в том месте или неуклюже. В чистом JSF2 вы можете аннулировать сеанс следующим образом:

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

Вы можете получить / установить объекты в сеансе с помощью Map сеанса.

Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
// ...

Или просто сделайте его управляемым бином (свойство).

Смотри также:

...