Gerenciar erros - Struts 2 [RESOLVIDO]

4 respostas
A

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

4 Respostas

jyoshiriro

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:

A
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
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);  
        }  
    }  
}

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

Att

jyoshiriro

Amigo, eu faria mais ou menos assim:

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;   
     
  }
A

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

Criado 28 de abril de 2010
Ultima resposta 29 de abr. de 2010
Respostas 4
Participantes 2