Página de redirecionamento Validator - VRaptor

16 respostas
L

Olá,

Gostaria de saber se é possivel no VRaptor fazer redirecionamento do validator mais ou menos assim:

validator.onErrorRedirectTo("pagina.jsp");

Grato

16 Respostas

Andre_Brito

Lucas,
Por que você precisa fazer isso? O Result não está funcionando direito?

L

Andre Brito:
Lucas,
Por que você precisa fazer isso? O Result não está funcionando direito?

Oi Andre, tudo bem?

O Result está, mas queria aproveitar os métodos do Validator que já faz a verificação: OnErrorInstrucao para redirecionamento.

E parece que ele aceita só assim, por exemplo:

validator.onErrorUsePageOf(ProdutoController.class).formulario()

Mas no caso gostaria de redirecionar para uma única página de erros, por isso gostaria de passar a String com nome do arquivo JSP que mostrará os erros.

Valeu!

Andre_Brito

Acho que você teria que ter um controller geral pra isso. Aí teria a parte do erro lá, quer seria default pra todos.

Ou, tente isso (não estou com o VRaptor aqui, porisso não pude testar):

validator.onErrorUse(status()).badRequest(errors);
Lucas_Cavalcanti

Isso funciona:

validator.onErrorUse(Results.page()).redirectTo("/pagina.jsp");

[]'s

L

Lucas Cavalcanti:
Isso funciona:

validator.onErrorUse(Results.page()).redirectTo("/pagina.jsp");

[]'s

Oi Lucas, obrigado, funcionou certinho.

Agora nao estou conseguindo fazer exibir as mensagens de erro na JSP:

<div>
				<ul>
					<c:forEach var="erro" items="${errors}" >
						<li> ${erro.category} - ${erro.message} </li>
					</c:forEach>
				</ul>
			</div>
//Já até tentei colocar o isELIgnored="false"

Controller:

validator.checking(new Validations(){{
		
			that(!professor.getNome().isEmpty(),"erro","obrigatorio");
			that(!professor.getEmail().isEmpty(), "erro", "obrigatorio");
			
		}});
			
		validator.onErrorUse(Results.page()).redirectTo("/erro-validacao.jsp");
		
		new GenericDAO().add(professor);

O que pode ser?

Lucas_Cavalcanti

a taglib c está importada na pagina de erro?

L

Oi Lucas, pior que está.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

A minha message.properties (está na WEB-INF/classes) por enquanto só tem uma mensagem:

obrigatorio = O(s) campo(s) obrigatorio(s) não fora(m) preenchido(s)
Lucas_Cavalcanti

tenta fazer a mesma coisa, só que crie uma lógica:

@Resource
public class TesteController {

    @Path("/erro-validacao.jsp")
    public void teste() {..}
}

troque para:

validator.onErrorRedirectTo(TesteController.class).teste();

e copie o erro-validacao.jsp para /WEB-INF/jsp/teste/teste.jsp

assim funciona?

L

Lucas Cavalcanti:
tenta fazer a mesma coisa, só que crie uma lógica:

@Resource
public class TesteController {

    @Path("/erro-validacao.jsp")
    public void teste() {..}
}

troque para:

validator.onErrorRedirectTo(TesteController.class).teste();

e copie o erro-validacao.jsp para /WEB-INF/jsp/teste/teste.jsp

assim funciona?

Olá Lucas,

Ele encontrou a página, redirecionou, e ainda continua sem listar…

Realmente está meio dificil de descobrir o erro. Pode ser alguma coisa de configuração?

Meu formulário de cadastro está em HTML puro, sem ser JSP, isso nao interfere ne? Quando esta tudo ok na validado, cadastra normal por Hibernate.

Esse trecho está correto?

that(!professor.getNome().isEmpty(),"erro","obrigatorio");
Lucas_Cavalcanti

o erro tá correto sim…

ele tá dando erro de validação mesmo? tenta fazer um:

validator.add(new ValidatorMessage("aaaaaa", "bbbbbb");

e na jsp colocar em algum lugar só:

${errors}

tenta trocar de redirect pra forward

L

Lucas Cavalcanti:
o erro tá correto sim…

ele tá dando erro de validação mesmo? tenta fazer um:

validator.add(new ValidatorMessage("aaaaaa", "bbbbbb");

e na jsp colocar em algum lugar só:

${errors}

tenta trocar de redirect pra forward

Oi Lucas,

Nem precisei tentar o teste do estilo clássico, troquei do redirectTo para forwardTo como voce disse, aí deu:

validator.onErrorUse(Results.page()).forwardTo("/erro-validacao.jsp");

Agora está redirecionando e exibindo as mensagens de erro.

Obrigado;

L

Só que nesse caso, ele mantém a URI que coloquei na Action (add/professor) ao inves de exibir erro-validacao.jsp

E nao encontra o arquivo do CSS : (

Lucas_Cavalcanti

sim, se vc usa o forward ele mantém a url antiga. Vc pode usar o <c:url para não ter problemas com o css…

só uma dica: o ideal é qdo houver erros de validação voltar pro formulário que originou os erros, é mais educado do que levar pra uma página que não tem nada a ver com o que vc tá fazendo.

Vc está com qual versão do VRaptor? o redirect deveria funcionar

L

Lucas Cavalcanti:
sim, se vc usa o forward ele mantém a url antiga. Vc pode usar o <c:url para não ter problemas com o css…

só uma dica: o ideal é qdo houver erros de validação voltar pro formulário que originou os erros, é mais educado do que levar pra uma página que não tem nada a ver com o que vc tá fazendo.

Vc está com qual versão do VRaptor? o redirect deveria funcionar

Biaxei a versão vraptor-blank-project em mais ou menos 25/03 no site do vraptor.

Vou refazer os testes novamento com Redirect. Depois eu posto os resultados.

Valeu Lucas!

L

Lucas,

Realmente nao consegui fazer por redirecTo : (, tive que usar o forward.

Quanto à voltar para tela de formulario, sei que é a forma mais ideal, no entanto, essa é validação para quem tenta burlar o JS, já que faço a mesma validação no cliente,
por isso, por se tratar de muito formulario, eu quis colocar em um ponto único para diminuir o código.

Se tu descobrir algo, por favor, poste aqui,

Valeu!

Lucas_Cavalcanti

vc não precisa aumentar o código… coloque os erros de validação em algum lugar do template das suas páginas (supondo que vc usa algum), e volte pra página de formulário.

Nem sempre é um usuário burlando, às vezes é algum erro no seu javascript, ou o usuário em algum browser que não suporta javascript, ou leitores de acessibilidade (para cegos por exemplo)

Criado 7 de junho de 2011
Ultima resposta 13 de jun. de 2011
Respostas 16
Participantes 3