Problemas com página de erro JSF

7 respostas
J

Bom dia pessoal.

Criei uma página de erro e adicionei no web.xml assim:

<error-page>
        <error-code>404</error-code>
        <location>/modulos/sistema/erro404.jsp</location>
    </error-page>

Erro:

ApplicationDispatcher[/sigeFenix] PWC1231: Servlet.service() for servlet jsp threw exception
java.lang.RuntimeException: Cannot find FacesContext
        at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:1811)

Entretanto, ele perde o faces context quando dá o erro 404 (neste caso). Assim, gera erro e não consigo exibir a minha página. Funcionou quando eu tirei td que era JSF e deixei só html, mas, eu preciso carregar meu layout, realizar log, enviar email e faço tudo isso usando meus MBs, ou seja, preciso usar JSF pra isso rs.

Alguém sabe como fazer pra recuperar o facesContext ou fazer com que ele não se perca quando desses erros que o servidor lança?

Obrigado pessoal.

7 Respostas

humberto.lima

tenta erro404.jsf

talvez voce tenha configurado para o servlet pegar *.jsf

[]'s

Humberto

J

Então, eu já tentei, mas, quando eu coloco a extensão que eu configurei, dá um erro 500 rs.

Esse erro 500 vem pq, eu passo a ter um nullPointer, por causa do facesContext null:

<servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.sige</url-pattern>
    </servlet-mapping>

Coloquei a extensão esperada:

<error-page>
        <error-code>404</error-code>
        <location>/modulos/sistema/erro404.sige</location>
    </error-page>

Erro:

java.lang.NullPointerException: FacesContext is null
        at org.ajax4jsf.context.AjaxContext.getCurrentInstance(AjaxContext.java:148)

Acho que ele não consegue converter direto.

humberto.lima

Acho q o location deve apontar para o contexto da sua aplicação, não pode ser uma pagina de fora.

J

Então, eu já tentei, mas, quando eu coloco a extensão que eu configurei, dá um erro 500 rs.

Esse erro 500 vem pq, eu passo a ter um nullPointer, por causa do facesContext null:

<servlet-mapping>  
   <servlet-name>Faces Servlet</servlet-name>  
   <url-pattern>*.sige</url-pattern>  
</servlet-mapping>

Coloquei a extensão esperada:

<error-page>  
   <error-code>404</error-code>  
   <location>/modulos/sistema/erro404.sige</location>  
</error-page>

Erro:

java.lang.NullPointerException: FacesContext is null  at org.ajax4jsf.context.AjaxContext.getCurrentInstance(AjaxContext.java:148)

Acho que ele não consegue converter direto.

J

Não entendi esta questão do Location Humberto.

Como eu garantiria que está apontando pra dentro da aplicação?

humberto.lima

como ta o mapping do a4j?

sobre o location, qual o contexto da tua aplicação?

tomcat->webapp-> sige-> *

a tua pagina de erro deve estar do * para baixo.

J

estou usando o glassfish 2.2.2.

Ah sim, a página de erro está dentro do location sim !!! … Está, inclusive, junto com a página de login (pra garantir mesmo que está na árvore reconhecida pelo contexto).

Nesse caso, não estou usando o a4j nessa página.

Quando a gente começa a fugir dos CRUD’s e dos relatórios, o desenvolvimento começa a apresentar uns comportamentos que exigem uma senioridade grande né.
Bom, espero logo poder ter experiência suficiente pra entender o por que de erros como este!

Ainda nao consegui fazer funcionar, mas, desde já, agradeço pela força.

Criado 6 de abril de 2010
Ultima resposta 6 de abr. de 2010
Respostas 7
Participantes 2