Условное перенаправление в JSF - PullRequest
12 голосов
/ 06 декабря 2011

есть ли встроенный механизм для условного перенаправления в другое представление?Я хочу, чтобы пользователь был перенаправлен со страницы входа на «домашнюю страницу», если он / она уже вошел в систему.

У меня уже есть два основных подхода, но для первого я понятия не имею, как добитьсяа второй - это своего рода грязный обходной путь.

  1. Добавьте <meta http-equiv="Refresh" content="0; URL=home.jsf" /> и пусть он будет отображен условно (EL: #{login.loggedIn})
  2. Добавьте <h:panelGroup />, что такжебыть условно предоставленным, содержащим некоторый JavaScript, выполняющий перенаправление.

Есть ли способ достичь 1 или даже другое, более элегантное решение?: -)

Спасибо

Ответы [ 2 ]

19 голосов
/ 06 декабря 2011

Вы можете использовать для этого <f:event type="preRenderView">.

Например

<f:event type="preRenderView" listener="#{login.checkAlreadyLoggedin}" />

с

public void checkAlreadyLoggedin() throws IOException {
    if (isLoggedIn()) {
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        ec.redirect(ec.getRequestContextPath() + "/home.xhtml");
    }
}
0 голосов
/ 31 марта 2017

Решение, заданное @BalusC, не работает, если представление 'home.xhtml' не является представлением по умолчанию для портлета JSF.Для тех, кому нужно перенаправить на представление не по умолчанию на этапе рендеринга, я предлагаю решение, изложенное в этой записи .То есть в рамках метода preRenderView выполните следующие действия:

FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler navigationHandler = fc.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(fc, null, "/views/nonDefaultView.xhtml?faces-redirect=true");
fc.renderResponse();

Кредиты @ Frizz1977

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