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

Qual a diferenca de retornar o redirecionamento e usar o NavigatioHandler

Boa noite, estava assistindo essa video aula e me veio uma duvida, qual a diferença de utilizarmos para redirecionar uma pagina o return "livro?faces-redirect=true"; por exemplo e utilizar o NavigationHandler para redirecionar a pagina. E porque na video aula ele utilizou o NavigationHandler e qual a diferença entre as duas. Obrigado.

4 respostas

faces-redirect=true você passa pela URL e o NavigationHandler você passa pelo código. Ele usa os dois para ensinar o aluno os dois jeitos mas depende muito do seu projeto qual usar qual. É bem pessoal isso.

Desculpa cara mas não consegui entender a diferença dos dois pois um ele utiliza o seguinte trecho para retornar para url:

NavigationHandler handler = context.getApplication().getNavigationHandler();

        handler.handleNavigation(context, null, "login?faces-redirect=true");

e em outros casos para redirecionar ele retorna uma string por exemplo:

public String efetuarLogin() {
        if(new UsuarioDao().existe(usuario)) {
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuarioLogado", usuario);
            return "livro?faces-redirect=true";
        }
        return null;

    }

Oi Victor, tudo bem? Não sou nenhum especialista no assunto mas já vi algo parecido no Spring.

A diferença que consigo interpretar desses dois código é onde o redirect vai ser interpretado.

No primeiro caso, com o handler, me parece que o redirect vai ser interpretado internamente no próprio servidor, ou seja, o próprio java vai cuidar do redirect.

No segundo caso, retornando a string direta, o redirect vai acontecer no lado cliente, ou seja, o navegador recebe um código 300 (ou coisa assim) e faz uma nova requisição.

Preciso confirmar minhas suspeitas, mas acredito que deve ser isso.

solução!

Oi Victor,

vc usou aquele código do handleNavigation no PhaseListener? Imagino que sim ...

No ManagedBean vc pode definir a navegação devolvendo uma string. OJSF entende esse retorno como navegação e vai usar automaticamente o NavigationHandler.

Um PhaseListener já é muito mais genérico e não tem esse retorno. Vc poderia ou não fazer uma navegação. E se quiser usar, precisa utilizar a classe NaviationHandler na raça.

Tudo bem?

abs