VRaptor 3 web.xml error-page

Estou com a seguinte duvida dentro do meu web.xml

	<error-page>
		<exception-type>403</exception-type>
		<location>/error/403</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/error/404</location>
	</error-page>

crie o controller da seguinte forma

@Resource
public class ErrorController {
	@Liberado
	@Path("/error/403")
	public void error403 () {
	}
	
	@Liberado
	@Path("/error/404")
	public void error404 () {
		
	}
}

Ou seja no result fiz o seguinte

result.use(Results.http()).setStatusCode(403);

So que nao esta mandando para meu controller como especificado no meu web.xml

Obrigado !!!
Joao Vitor

o error page precisa ser uma página jsp… =(

[quote=jvds@bol.com.br]Estou com a seguinte duvida dentro do meu web.xml

	<error-page>
		<exception-type>403</exception-type>
		<location>/error/403</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/error/404</location>
	</error-page>

crie o controller da seguinte forma

@Resource
public class ErrorController {
	@Liberado
	@Path("/error/403")
	public void error403 () {
	}
	
	@Liberado
	@Path("/error/404")
	public void error404 () {
		
	}
}

Ou seja no result fiz o seguinte

result.use(Results.http()).setStatusCode(403);

So que nao esta mandando para meu controller como especificado no meu web.xml

Obrigado !!!
Joao Vitor[/quote]

Ate achei um post no guj que vc mostra como fazer a solucao
POST esse aqui http://www.guj.com.br/posts/list/199123.java

@Component
@RequestScoped
public class CustomErrorVraptor implements ResourceNotFoundHandler {
	private final Result result;
	
	public CustomErrorVraptor(Result result) {
		// TODO Auto-generated constructor stub
		this.result = result;
	}
	
	@Override
	public void couldntFind(RequestInfo arg0) {
		// TODO Auto-generated method stub
		this.result.use(Results.logic()).redirectTo(ErrorController.class).error404();
	}
	
	

}

Deu certo tudo mas minha duvida e o seguinte isso sei que da certo e que tenho outros erros como 403 forbiden por exemplo teria que redirecionar para esse pelo que eu entendi esta classe so funciona quando nao acha uma logica certo por isso que pensei se o vraptor nao acessa um jsp direto
exemplo:
http://localhost:8080/caelum/index.jsp

Hoje consigo fazer isso pq ai eu colocaria assim no meu web.xml

	<error-page>
		<exception-type>403</exception-type>
		<location>/403.jsp</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/404.jsp</location>
	</error-page>

Ou tem uma outra solucao ?

Obrigado !!!
Joao Vitor

Ja fiz isso coloquei na raiz WEB-INF por exemplo error404.jsp nao esta funcionando.

você que vai gerar esses erros 404 e 403? se sim, vc pode redirecionar direto pros controllers que vc quer ao invés de mudar o status

Lucas, um error page não tem que ser um jsp não. Pode ser qualquer caminho relativo a aplicação, mas que pode ser uma action, servlet ou jsp. Qualquer URI é aceito.

Não sei é o caso do João Vitor, mas é importante mesmo que você redirecione para alguma tela que você retorne nos headers os códigos de resposta, pois quando você usa ajax e afins você consegue ter um controle se há ou não erro. Ou seja, quando der um erro você pode até redefinir o fluxo, porém não pode deixar de informar o browser que ocorreu algum erro.

O 403 sou eu que vou gerar o erro ja o 404 nao.

se vc quiser só mostrar uma página estática, use a configuração do error-page para uma jsp, que tem que estar na pasta acima da WEB-INF (na WebContent ou algo do tipo)…

tenta variar com ou sem ‘/’ no começo do nome do jsp, eu não lembro como é o certo…

[]'s

[quote=Lucas Cavalcanti]se vc quiser só mostrar uma página estática, use a configuração do error-page para uma jsp, que tem que estar na pasta acima da WEB-INF (na WebContent ou algo do tipo)…

tenta variar com ou sem ‘/’ no começo do nome do jsp, eu não lembro como é o certo…

[]'s[/quote]

Lucas ja fiz assim sem barra ja nem deixa tem que ser com / e nao rola sempre abre a pagina em branco

<error-page>
	<error-code>404</error-code>
	<location>/error404.jsp</location>
</error-page>

[quote=jvds@bol.com.br][quote=Lucas Cavalcanti]se vc quiser só mostrar uma página estática, use a configuração do error-page para uma jsp, que tem que estar na pasta acima da WEB-INF (na WebContent ou algo do tipo)…

tenta variar com ou sem ‘/’ no começo do nome do jsp, eu não lembro como é o certo…

[]'s[/quote]

Lucas ja fiz assim sem barra ja nem deixa tem que ser com / e nao rola sempre abre a pagina em branco

<error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> [/quote]

Lucas o codigo acima esta errado mesmo para funcionar tem que colocar assim:

<error-page>
	<error-code>404</error-code>
	<location>/WEB-INF/error404.jsp</location>
</error-page>

Agora resolveu.

Obrigado !!!
Joao Vitor

Estou com o mesmo problema:

web.xml

<error-page>
		<error-code>403</error-code>
		<location>/jsp/error403.jsp</location>
</error-page>

classe java:

result.use(Results.http()).setStatusCode(403);

Mas o erro 403 exibido é o do tomcat em vez da minha pagina error403.jsp

Engraçado que o erro 404 é enviado corretamente para a minha página error404.jsp

Alguem sabe como resolver?

Valeu!

Testei com:

response.sendError(403);

e funcionou. Porque com o VRaptor não funciona?

não funcionou porque o result.setStatusCode chama o response.setStatusCode(), que nunca redireciona pra página de erro…

use:

result.use(Results.http()).sendError(403);
//ou
result.use(Results.status()).forbidden("Mensagem");

Manero. Valeu Lucas, ainda te pago um café!