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

Explicação mais detalhada

Olá, pesquisei antes de postar essa questão, mas alguém poderia me dar uma explicação bem detalhada sobre essas duas linhas respondendo as perguntas abaixo?

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

O nico explica os conceitos de uma forma muito clara e didática e mesmo sabendo que o curso é iniciante, acho que aprendi muito comparado com aquilo que eu sabia de JSF duas semanas atrás, porémfiquei confuso nesse ponto do curso.

1) Posso dizer que contexto da aplicação é a fase do ciclo de vida do JSF na qual estou no momento?

2) Se o handler significa os dados da aplicação, qual o sentido de pegar os dados jogar para um objeto que faz a navegação, pra somente a partir daí chamar um método que exige três parametros, sendo que um é o próprio contexto?

3) Existe alguma outra forma (ou framework) que faria isso de maneira mais simplificada? Como seria, por exemplo, com Spring MVC?

4) Quando é recomendável utilizar JSF ou Spring MVC, ou não existe uma relação, entre ambos frameworks?

Abraços.

2 respostas
solução!

Olá Andre, vou tentar te ajudar com algumas dúvidas:

O Contexto da aplicação é um termo muito utilizado não só pelo JSF, basicamente é a definição de como ou onde a sua aplicação está situada. É um conceito muito mais teórico do que prático. Na prática, é lá que você precisa buscar os elementos para controlar sua aplicação, não sei se ficou muito claro...

No caso do código

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

Você está buscando o "gerenciador de navegação" para poder direcionar o usuário dentro da sua aplicação, e esse gerenciador fica dentro do contexto da sua aplicação.

Já o método handleNavigation, segundo a documentação:

"Perform navigation processing based on the state information in the specified FacesContext, plus the outcome string returned by an executed application action."

Ele usa o contexto para recuperar o estado da informação, retornando uma string pela execução de um ação (que seriam os outros dois parâmetros). Acredito que para você saber o que isso faz na prática, teria que adentrar o .jar e verificar como o método foi codificado. Mas a ideia da api e da implementação é não nos preocuparmos com isso, apenas saber que ele serve para navegar e saber utilizar =)

Quanto as integrações do JSF com os demais frameworks, o Nico ensina de maneira incrível no terceiro módulo deste curso, acho que você vai adorar assim como eu. Mas basicamente, aplicação pode ter sua camada de controle gerenciada pelo Spring (utilizando o @Controller), ou pelo CDI (utilizando o @Named). Assim como outras camadas controladas por outros frameworks como o EJB.

Muito obrigado pela explicação Luis, grande abraço e bons estudos :)