Não quero deixar nenhum erro sem tratamento, na pior das hipóteses colocar o erro numa lista e enviar para a minha view exibir dentro de uma caixinha de erro apropriada.
	public void editar(Casa casa) {
		result.on(Exception.class).include("MSG_ERRO", validator.getErrors());
		casaDao.editar(casa);
		result.include("MSG_SUCESSO", "editar.sucesso");
		result.redirectTo(this).pesquisar(casa, "", "");
	}
É um erro que seria fácil de validar direitinho e tudo, inclusive vou melhorar as validações, mas porque o erro não chega no meu controller? E se fosse outro erro desconhecido qualquer, eu ficaria no escuro tb?
         
        
           
         
            
       
      
        
        
          essa exception só vai acontecer no commit da transação (ou qdo a operação for pro banco)… então o único jeito de pegar esse erro no controller seria fazer um try…catch em volta do método que commita a transação…
se isso estiver sendo feito fora do dao, vc pode fazer um session.flush() ou entityManager.flush() pra forçar o erro.
         
        
           
         
            
       
      
        
        
          Mas o commit está no HibernateTransactionInterceptor (que inclusive foi você quem programou), eu vou precisar editar essa classe de alguma forma?
[code]org.hibernate.exception.GenericJDBCException: ERROR: current transaction is aborted, commands ignored until end of transaction block
root cause
org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
         
        
           
         
            
       
      
        
        
          vc fez o session.flush() dentro do dao e não deu a exception?
o que vc pode fazer é parar de usar o controle de transação do VRaptor e configurar o do spring, que deixa vc colocar um @Transactional  em volta do dao e daí a exception chegaria no controller…
o problema aqui é que a exception acontece só no interceptor que faz o commit, depois que o método do controller já fez o redirect pra página de sucesso.
         
        
           
         
            
       
      
        
        
          Eu dei session.flush() dentro do dao e coloquei throws Exception no metodo. No controller eu faço um try/catch, mas o erro não é tratado, aparece na verdade aquela tela de erro do tomcat no navegador.	public void editar(T bean) throws Exception {
		session.update(bean);
		session.flush();
	}@Post()
	public void editar(Casa casa) {
		try {
			casaDao.editar(casa);
			result.include("MSG_SUCESSO", "editar.sucesso");
			result.redirectTo(this).pesquisar(casa, "", "");
		} catch(Exception e) {
			List<String> le = new ArrayList<String>();
			le.add(e.toString());
			result.include("MSG_ERRO", le);
		}
	}
         
        
           
         
            
       
      
        
        
          O que tá errado? Não era para tratar o erro assim? A pilha de erro nem mostra nada referente às minhas classes…
         
        
           
         
            
       
      
        
        
          Quando coloco o try/catch no DAO ele intercepta o erro, mas de lá tem como eu setar a lista de mensagens de erro que é exibida na view? Seria indicado fazer isso?
         
        
           
         
            
       
      
        
        
          significa que o session.flush() não tá soltando a exception, então não adianta fazer desse jeito.
tenta criar esse arquivo:
  
  
    
RedirectCommitInterceptor.java 
@Intercepts
public class RedirectCommitInterceptor implements Interceptor {
   private Session session;
   private MutableResponse response;
   public RedirectCommitInterceptor(Session session, MutableResponse response) {
       this.session = session;
       this.response = response;
   }
   public boolean accept(ResourceMethod method) {show original 
   
  
    
    
  
  
 
se não funcionar tenta configurar o spring transaction, que nem esse post tá falando:http://www.guj.com.br/java/276595-vraptor-exception-handling-nao-funcionando#1455854 
         
        
           
         
            
       
      
        
        
          [RESOLVIDO]	public void editar(T bean) {
		try {
			session.update(bean);
			session.flush();
		} catch(Exception e) {
			Message msg = new ValidationMessage(e.toString(), "");
			validator.add(msg);
		}
	}
	@Post()
	public void editar(Casa casa) {
		casaDao.editar(casa);
		validator.onErrorRedirectTo(this).carregar(casa);
		result.include("MSG_SUCESSO", "editar.sucesso");
		result.redirectTo(this).pesquisar(casa, "", "");
	}