JSF перенаправление при загрузке страницы - PullRequest
4 голосов
/ 05 марта 2010

Короткий вопрос: возможно ли сделать перенаправление, например, когда пользователь не вошел в систему, когда страница отображается?

Ответы [ 4 ]

9 голосов
/ 05 марта 2010

Для этого вам следует использовать Filter.

1008 * Е.Г. *

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
        ((HttpServletResponse) response).sendRedirect("error.jsf"); // Not logged in, so redirect to error page.
    } else {
        chain.doFilter(request, response); // Logged in, so just continue.
    }
}

Здесь я предполагаю, что User помещен в область видимости сеанса, как вы обычно ожидаете. Это может быть управляемый компонент JSF в рамках сеанса с именем user.

Правило навигации не применимо, поскольку во время обычного запроса GET средства «действия компонента» отсутствуют. Кроме того, перенаправление, когда управляемый bean-компонент собирается быть готовым к работе, потому что, когда управляемый bean-компонент создается во время обычного запроса GET, ответ уже начал отображаться, и это точка 1017 * нет возврата (это даст только IllegalStateException: response already committed). PhaseListener громоздок и подавляющим, так как вам на самом деле не нужно слушать на любой из фаз JSF. Вы просто хотите прослушать «простые» HTTP-запросы и наличие определенного объекта в области сеанса. Для этого идеально подходит Фильтр.

3 голосов
/ 05 марта 2010

Да:

if(!isLoggedIn) {
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
}
1 голос
/ 05 марта 2010

В PhaseListener попробовать:

FacesContext ctx = FacesContext.getCurrentContext();
ctx.getApplication().getNavigationHandler()
     .handleNavigation(ctx, null, "yourOutcome");
1 голос
/ 05 марта 2010

Вы можете использовать PhaseListener, чтобы указать, когда вы хотите сделать перенаправление.

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