Error Handler Facelets - Como tratar Exceções

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?

pessoal, ainda não achei solução para o problema. Mas tenho algo mais para perguntar… (hehehe, cara chato né???)

Vi que em Facelets posso usar a tag <c:if>, seria muita gambi eu fazer um login usando isso???

pessoal, sobre o redirecionamento, consegui fazer com o FacesContext mesmo, parece que uma parte extra no código não estava funcionando. Ao final, essa parte ficou assim:

FacesContext context = FacesContext.getCurrentInstance(); context.getApplication().getNavigationHandler().handleNavigation(context, null, "SecurityException");
Agora tenho outra dúvida, como eu faço para colocar dois commandButton’s em um único form? Quero associar um método a cada um!

é… parece que o pessoal aqui não gosta muito de mim, heheheheh!!!

Tenho um rich:dataTable, e quero fazer ele abrir uma página de edição do registro quando clicar no registro.
Existe alguma forma de passar parâmetros por um commandLink? no caso, eu queria passar um id para identificar o registro.

Outra dúvida, como eu faço para navegar entre as abas de um rich:tabPanel por javascript?

Bom, continuando:

Sobre o c:if, não funciona em facelets, mas achei o rendered="#{boolean}", que exibe ou não alguma tag. Parece ser a melhor prática.

Sobre o commandLink, ficou assim:

dentro do xhtml

<h:commandLink action="#{interface.changeUser}" target="cadUser"> <f:param value="#{usuario.id}" name="id" /> <h:outputText value="#{usuario.name}"/> </h:commandLink>
dentro do método:

[code]

public String changeUser(){
	FacesContext context = FacesContext.getCurrentInstance();   
	HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();   
	         
	int id = new Integer( req.getParameter("id") ).intValue();   
	   System.out.println(id);[/code]

Agora falta a parte de fazer mudar de aba no rich:tabPanel através de javascript.

Outra pergunta: Alguém sabe como eu faço para, somente o acesso dentro de url/admin/ iniciar uma seção com determinada classe e, quando acessar por url
sem o /admin?

Alguém tem alguma ideia??? Se puderem me ajudar eu agradeço!