Gerenciar erros - Struts 2 [RESOLVIDO]

Boa noite Pessoal,

Estou com uma duvida referente a struts 2, que é a seguinte

Minhas classes de negocio vão gerar exceptions (Erros de Regra de Negocio), porem não estou conseguindo fazer a conversão automatica da classe de negócio com as tags Struts
O que quero fazer é caso uma action gera uma exceção automaticamente um interceptors fizesse isto

addActionError(Excecao.getMessage); addActionMessage(Excecao.getMessage);
E o metodo da action ficaria apenas assim

public String execute() { if (usuario.isUserValid()) { return SUCCESS; } return INPUT; }

Porem como nao consegui fazer isto automaticamente, eu estou fazendo assim public String execute() { try { if (usuario.isUserValid()) { return SUCCESS; } } catch (NegocioException ne) { addActionError(ne.getMessage); } return INPUT; }

Mas isto gera um trabalho muito grande e desnecessário, pois preciso ficar tratando todas as exceções, mesmo eu sabendo que são excecoes de regra de negocio, e eu vou fazer sempre a mesma coisa com elas.
Existe alguma maneira de eu criar um interceptors, ou qualquer outra coisa que mapeia uma exceção de negocio, para tags struts…

Outra pergunta seria, isto é a maneira correta de se fazer? como vcs gerenciam os erros de negocio, para enviar para a pagina html do usuário

Att

De fato, o uso de Interceptors é a melhor solução. Já fiz algo assim e ficou bem legal.

Se você pudesse passar o código do seu Interceptor nos ajuda a te ajudar :wink:

Opa, segue o código do interceptors… na verdade está apenas a estrutura, já que não tenho uma ideia de como obter o objeto exception

[code]package br.interceptors;

import org.apache.struts2.StrutsStatics;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ValidationAware;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.PreResultListener;

@SuppressWarnings(“serial”)
public class ExceptionPadraoInterceptors extends AbstractInterceptor
implements StrutsStatics {

public String intercept(ActionInvocation invocation) throws Exception {  
    invocation.addPreResultListener(new PreResultListener() {  
        public void beforeResult(ActionInvocation action,   
                                 String resultCode) {  
              // Quero ter o objeto exceção gerado pela action aqui...para fazer esta operacao
              addActionError(exception.getMessage());
        }  
   });  
      
    return invocation.invoke();  

}  

private void addActionError(ActionInvocation invocation, String message) {  
    Object action = invocation.getAction();  
    if (action instanceof ValidationAware) {  
        ((ValidationAware) action).addActionError(message);  
    }  
}  

private void addActionMessage(ActionInvocation invocation, String message) {  
    Object action = invocation.getAction();  
    if (action instanceof ValidationAware) {  
        ((ValidationAware) action).addActionMessage(message);  
    }  
}  

} [/code]

jyoshiriro, se puder tbm me enviar a sua solução ou pelo menos esta parte de tratamento de exception… me ajudaria muito

Att

Amigo, eu faria mais ou menos assim:

[code]public String intercept(ActionInvocation invocation) throws Exception {
String resultado = “error”;
try {
resultado = invocation.invoke();
} catch (NegocioException e) {
addActionError(e.getMessage());
}catch (Exception e) {
// faz o que para erro geral?
}
return resultado;

} [/code]

jyoshiriro, obrigado deu certo !!! como estava utilizando addPreResultListener, a exceção nem chegava nele… e como não estava tratando, o struts dava erro.

Agradeço a ajuda…

Att