Página de erro personalizada no Vraptor

Olá pessoal,

Gostaria de criar uma página de erro personalizada no Vraptor. Mas eu preciso de um controller pra essa página, pois eu preciso executar um código Java antes de renderizar ela. Por enquanto to fazendo assim:

  • web.xml:

<error-page> <error-code>404</error-code> <location>/erro</location> </error-page>

  • Controller:

@Path("/erro") public void erro() { //código que eu preciso executar }
Mas dessa forma, está aparecendo a mensagem de erro padrão do Apache. Como posso fazer isso?

existe o erro.jsp correspondente a esse método?

o filtro do VRaptor tá com o dispatcher de ERROR?

Ah sim, esqueci de dizer. No controller eu defino minha view na mão:

@Path("/erro") public void erro() { //Código que eu preciso executar result.forwardTo("/WEB-INF/jsp/erro.jsp"); }
Essa view existe sim e o filtro do Vraptor está com o dispatcher de erro:

<filter-mapping> <filter-name>vraptor</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>

chega a passar no controller?

Não passa pelo controller.

Infelizmente não funciona mesmo =(

Se o problema for logar 404, vc pode sobrescrever o componente ResourceNotFoundHandler, que é chamado quando não acha o controller:

@Component
public class CustomHandler extends DefaultResourceNotFoundHandler {
    //sobrescreve o couldntFind
}

Eu não quero logar não. Quero usar usar código jstl no front-end e quero definir uma variáveis no back-end pra ser usada no front-end. E na verdade eu gostaria de tratar outros tipos de erro, não só 404. Mas com esse DefaultResourceNotFoundHandler eu consigo dar um “redirectTo” e direcionar pro controller da minha página de erro? Não seria exatamente o que eu preciso, mas já ajuda.

Outra pergunta: tem como, de alguma forma, fazer um pedido pra integrarem essa funcionalidade no desenvolvimento do VRaptor? Seria uma boa… O VRaptor é open-source? Se for eu posso dar uma olhada no código e tentar implementar isso.

Dá pra fazer o redirect sim, pelo menos teoricamente.

Sim, o VRaptor é open-source:

Provavelmente o código que vc vai mexer é no comecinho da classe VRaptor (o filter).

Mande um pull request, será muito bem vindo =)