Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não consigo acessar login.xhtml

Estou recebendo o erro:

HTTP Status 500 - Cannot call sendRedirect() after the response has been committed

javax.servlet.ServletException: Cannot call sendRedirect() after the response has been committed javax.faces.webapp.FacesServlet.service(FacesServlet.java:671) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

3 respostas

Oi Felipe, pode mostrar o código? Essa exception ta indicando que o.response foi usado pra enviar algo e depois foi tentado fazer um redirect.

Fala Alberto, eu baixei o projeto que o instrutor deixou disponivel, segue o codigo:

public class Autorizador implements PhaseListener  {

    private static final long serialVersionUID = 1L;

    @Override
    public void afterPhase(PhaseEvent evento) {

        FacesContext context = evento.getFacesContext();
        String nomePagina = context.getViewRoot().getViewId();

        System.out.println(nomePagina);

        if("/login.xhtml".equals(nomePagina)) {
            return;
        }

        Usuario usuarioLogado = (Usuario) context.getExternalContext().getSessionMap().get("usuarioLogado");

        if(usuarioLogado != null) {
            return;
        }

        //redirecionamento para login.xhtml

        NavigationHandler handler = context.getApplication().getNavigationHandler();
         handler.handleNavigation(context, null, "/login?faces-redirect=true");
        context.renderResponse();
    } 

    @Override
    public void beforePhase(PhaseEvent event) {
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }

}
solução!

Solucao no IntelliJ: estava faltando colocar o context(livraria) na configuracao do TomCat (dentro do INtelliJ), para o Mojarra inicializar neste contexto. Diferente do que ocorre no eclipse onde isso fica tranasparente.

Valeu Alberto