Olá pessoal, para variar, estou com problemas com Facelets.
Estou tentando implementar um login em minha aplicação, mas não consigo colocar um redirect através do web.xml da mesma maneira que eu fazia em JSP:
<error-page>
<exception-type>java.lang.SecurityException</exception-type>
<location>/admin/fail.jsf</location>
</error-page>
Dentro do código, de acordo com a condição, eu coloco um:
throw new SecurityException
Acredito que a exceção esteja sendo pega pelo handler do Facelets, com isso me dá o seguinte erro:
javax.el.ELException: /admin/listUser.xhtml @18,58 value="#{interface.userList}": Error reading 'userList' on type com.controller.Interface
Alguém sabe como eu posso capturar uma exceção pelo handler do Facelets e redirecioná-la para uma página específica? É essa a melhor prática para fazer login no facelets?
Ps: Tentei redirecionar usando o FacesContext, mas também não consegui:
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(
FacesMessage.SEVERITY_FATAL, "Acesso não autorizado!", null));
System.out.println("Acesso não permitido");
context.getApplication().getNavigationHandler().handleNavigation(context, null, "SecurityException");
E no faces-config.xml:
<navigation-rule>
<navigation-case>
<from-outcome>SecurityException</from-outcome>
<to-view-id>/admin/fail.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Entretanto também não consegui fazer redirecionar, para outros casos (que não seja login, mais para eu conhecer mesmo), existe alguma forma de fazer dessa maneira?
E última pergunta, estou usando filter do ajax4jsf, por isso a URL não muda quando é redirecionado (é pego pelo filter do A4J e envia por ajax), como eu faço para algumas páginas eu conseguir fazer isso e em outras redirecionar a URL?