Prezados estou achando uma coisa estranha no VRaptor 3.
O meu código é o seguinte:
if(listaUsuario.size() != 0){
				//código de sucesso!
			}//fim if
			else{
				validator.add(new ValidationMessage("Login ou senha inválidos","erro"));
			}//fim else
			validator.onErrorUsePageOf(LoginController.class).index();
			result.redirectTo(AssuntoController.class).chat();Só que quando adiciono o erro eu redireciono para a mesma página, de login:
E na página tem as tags:
<c:forEach var="error" items="${errors}">
   ${error.message}<br />
</c:forEach>Até aí tudo bem. Quando ele volta pra página com erro adicionado. Ele mostra o erro na página, perfeito!
Mas mesmo assim ele gera exceção quando passa pela linha: validator.onErrorUsePageOf(LoginController.class).index();
Gostaria de não ficar gerando exceção que não me ajuda.
PS: Preciso redirecionar para a mesma página e não para uma página de erro especifica.
Grato!
Segue o erro:
SEVERE: Servlet.service() for servlet [default] in context with path [/TabsChatV] threw exception
 
 
         
        
           
         
            
       
      
        
        
          qual versão do VRaptor?
PS: sério que vc coloca comentários em todos os }? o.0
         
        
           
         
            
       
      
        
        
          Rsrs. Eu sou muito metódico cara!!
Eu to usando a versão 3, VRaptor3.
Eu inda não tentei jogar para uma outra página. Mas não é isso que eu queria. Tinha que aparecer o erro na mesma página.
         
        
           
         
            
       
      
        
        
          qual versão 3? 3.3.1? 3.2.0?
ele tá passando pela linha do validator.onErrorUse…?
         
        
           
         
            
       
      
        
        
          3.3.1
Com certeza! É nessa linha mesmo que dá erro.
Debugando:
        else{
        	validator.add(new ValidationMessage("Login ou senha inválidos","erro"));
        }//fim else
        validator.onErrorUsePageOf(LoginController.class).index();
        result.redirectTo(AssuntoController.class).chat();ele entra no else.
validator.add(new ValidationMessage("Login ou senha inválidos","erro"));depois vai para a linha:
validator.onErrorUsePageOf(LoginController.class).index();e aí dá br.com.caelum.vraptor.InterceptionException.
try{
	//Código
	if(listaUsuario.size() != 0){
		//Código
	}//fim if
	else{
		validator.add(new ValidationMessage("Login ou senha inválidos","erro"));
	}//fim else
		validator.onErrorUsePageOf(LoginController.class).index();
		result.redirectTo(AssuntoController.class).chat();
	}//fim try
	catch(Exception e){
		e.printStackTrace();
	}//fim catch 
        
           
         
            
       
      
        
        
          tire o try…catch exception!
a linha  validator.onErrorUsePageOf(LoginController.class).index(); lança uma exceção caso hajam erros, e o VRaptor usa isso pra fazer a validação. Como vc fez o try…catch e ignorou a exceção vc quebrou o comportamento do VRaptor.
         
        
           
         
            
       
      
        
        
          uhm… Valeu!! É isso mesmo.
Tipo assim:
try{
			if(listaUsuario.size() != 0){
				usuario = listaUsuario.get(0);
				session.setAttribute("usuario", usuario);
				global.getUsuariosOnline().add(usuario);
				entityManager.close();
			}//fim if
			else{
				validator.add(new ValidationMessage("Login ou senha inválidos","erro"));
			}//fim else
		}//fim try
		catch(Exception e){
			e.printStackTrace();
		}//fim catch
		validator.onErrorUsePageOf(LoginController.class).index();
                try{
                   //mais código que eu gostaria de executar se não houver erro
                }
                catch(Excption e){
                }
		result.redirectTo(AssuntoController.class).chat();
É isso?
Como se não houver erro adicionado ele não gera aquela exceção eu prefiro colocar tudo em um try/catch mesmo. Essa exceção não tem tanto problema.
         
        
           
         
            
       
      
        
        
          pra quê colocar esses try…catch’s?
não sei onde vc aprendeu isso, mas te ensinaram errado.
Deixa a exceção rolar, daí pelo menos vc vai saber que tem algo errado e vc pode se recuperar de algum jeito.
         
        
           
         
            
       
      
        
        
          Que isso cara!
E em outras partes da aplicação o try/catch ajuda se eu quiser tratar erro. Dar um rollback por exemplo.
         
        
           
         
            
       
      
        
        
          O fato do VRaptor3 criar essa exceção não tem problema. Mesmo porque, na prática não muda nada.
br.com.caelum.vraptor.validator.ValidationException 
        
           
         
            
       
      
        
        
          na boa, você deveria aprender mais sobre desenvolvimento java pra web…
se você não quer que o usuário veja a sua stacktrace, vc customiza a página de erro do servidor. Vc faz isso com uma configuração no web.xml (procure por error-page)
esconder o erro no código é ERRADO.
try {
} catch (Exception e) {
   //nada ou só o e.printStacktrace
}é a pior coisa que você pode fazer na aplicação.
se vc vai colocar alguma coisa no catch, tudo bem, mas ignorá-lo é ERRADO.
você vai criar uma fonte infinita de bugs na sua aplicação.
resumindo: try…catch não é errado, mas ignorar a exception é.
desculpe o tom agressivo, mas é justamente pra chamar a sua atenção. 
o VRaptor lança ValidationException pois qdo dá erro de validação vc não quer que execute o resto da sua lógica. E ele usa a validation exception para fazer o redirect que vc configurou
         
        
           
         
            
       
      
        
        
          É conheço.
Os códigos que eu postei eu escrivi agora. Não é de uma aplicação de verdade é só pra teste.
         
        
           
         
            
       
      
        
        
          não me leve a mal, mas eu já perdi 2 dias tentando resolver um bug misterioso numa aplicação, e a causa dele era um try…catch vazio. Ou seja, aprendi que isso é ruim do jeito ruim.
         
        
           
         
            
       
      
        
        
          Ta certo cara!