Trata erro pelo Struts?

1 resposta
P

Olá pessoal,

estou com uma duvida referente ao validate do Struts pois qunado saio

da pagina Jsp e chamo um action …primeiro ele vai executar o validate

do FORM do Struts mas se encontra um erro teria que apresentar a tela de

erro …quando debuguei o metodo validate está indo bem até aqui :

if (!validarDiaMesObrigatorio()) {
 
 
                     mensagemErro = "Informe uma data de vencimento (Dia e Mês) para efetuar o rotativo";
                     erros.add(ActionErrors.GLOBAL_ERROR, new ActionError("erro", mensagemErro)); // erro que define no strtuts-config
                     ArrayList mensagensErros = new ArrayList();        
                     mensagensErros.add(mensagemErro);
                     urlVoltar = "Volta.do" ;
                     request.setAttribute("mensagemErro" , mensagemErro);
                 }
 
                 return erros;
                 }

esse return erros e depois ele teria que ir pra onde pro ClienteAction

e onde trato pra ir pra <forward name=“erro” pra chamar a pagina jsp

de erro ?

Aonde estou errando ?
Se alguem puder me ajudar , agradeceria ?

abs

struts-config.xml
 
 
 &lt;global-forwards&gt;
 
 
 &lt;forward name="erro" path="/home/msgerro.jsp" /&gt;
 
 &lt;/global-forwards&gt;   
 
 &lt;form-beans&gt;

   
   &lt;form-bean name="ClienteForm" type="com.seguranca.controller.ClienteForm"/&gt;   
&lt;/form-beans&gt;
 
&lt;!-- ini  --&gt;

&lt;action path="/Usuario/checa" parameter="checa" type="com.seguranca..controller.ClienteAction"
	    scope="request"  name="ClienteForm" validate="true"&gt;
    	&lt;forward name="success" path="/home/frame.html"/&gt;
        
&lt;/action&gt;


 Form.....
 
 
 public class ClienteForm  extends ActionForm &#123;
 
 
 	public ActionErrors validate&#40;ActionMapping mapping,
             HttpServletRequest request&#41; &#123;
 		
             ActionErrors erros = new ActionErrors&#40;&#41;;
 
 
                 if &#40;!validarDiaMesObrigatorio&#40;&#41;&#41; &#123;
 
 
                     mensagemErro = "Informe uma data de vencimento &#40;Dia e Mês&#41; para efetuar o rotativo";
                     erros.add&#40;ActionErrors.GLOBAL_ERROR, new ActionError&#40;"erro", mensagemErro&#41;&#41;; // erro que define no strtuts-config
                     ArrayList mensagensErros = new ArrayList&#40;&#41;;        
                     mensagensErros.add&#40;mensagemErro&#41;;
                     urlVoltar = "Volta.do" ;
                     request.setAttribute&#40;"mensagemErro" , mensagemErro&#41;;
                 &#125;
 
                 return erros;
                 &#125;
 
 
 &#125;
 
 ----
 
 action do struts
 
 
 public class ClienteAction extends Action &#123;
 	
 	public ActionForward execute&#40;ActionMapping mapping, 
 	                             ActionForm actionForm,
 			                     HttpServletRequest request, 
 			                     HttpServletResponse response&#41; &#123;
     	ActionForward forward = null; 
         
         ClienteForm form = &#40;ClienteForm&#41; actionForm;	
        		                     	
         try&#123;
 		
             
             System.out.println&#40;"exemplo&#40;ProcessoAction 2&#41;"&#41;;
            
             request.setAttribute&#40;"ClienteForm", form&#41;;
             
         	System.out.println&#40;"exemplo&#40;2&#41;"&#41;;
 			forward = mapping.findForward&#40;"sucesso"&#41;;
 
 		&#125;catch &#40;Exception e&#41; &#123;
 			System.out.println&#40;"erro ="+e&#41;;
 		        return null;
 		&#125;
 		return forward;	
   &#125;
 &#125;

1 Resposta

P

cara....no mapeamento da sua action no struts config, vc configura um outro foward, chamado erro no caso.....vc pode usar a parte de messages do struts tb, tipo assim...

na sua action, antes de vc dar o foward, vc adiciona:
saveMessages&#40;request, &quot;mensagem de erro!&quot;&#41;;
vc cria um bloco de codigo na sua jsp, com a tag message:present e depois poe o codigo q captura seu erro e mostra....tipo assim:
&lt;logic&#58;messagesPresent&gt;	
				&lt;table&gt;
					&lt;tr&gt;
						&lt;td class=&quot;mensagem&quot;&gt;
						  Ocorreu o seguinte erro&#58;
						   &lt;ul&gt;
						   &lt;html&#58;messages id=&quot;erro&quot;&gt;
						      &lt;li&gt;&lt;bean&#58;write name=&quot;erro&quot; filter=&quot;false&quot;/&gt;&lt;/li&gt;
						   &lt;/html&#58;messages&gt;
						   &lt;/ul&gt;
						&lt;/td&gt;
					&lt;/tr&gt;
				&lt;/table&gt;
			&lt;/logic&#58;messagesPresent&gt;

lembrando q vc tem q configurar o input da sua action para usar o validator....o input seria pra determinar, pra onde q ele tem q redirecionar caso o validator acuse algum problema no form.....

seria algo do tipo:

&lt;action path=&quot;/CadastrarForm&quot; scope=&quot;request&quot; name=&quot;formCadastro&quot; validate=&quot;no&quot; type=&quot;br.com.cadastro.action.CadastrarFormAction&quot;&gt;
			&lt;forward name=&quot;sucesso&quot; path=&quot;cadastro.jsp&quot;/&gt;
		&lt;/action&gt;
		
		&lt;action path=&quot;/CadastrarSessao&quot; name=&quot;formCadastro&quot; input=&quot;input&quot; type=&quot;br.com.cadastro.action.CadastrarSessaoAction&quot; scope=&quot;session&quot;&gt;
			&lt;forward name=&quot;input&quot; path=&quot;/CadastrarForm.do&quot;/&gt;					
			&lt;forward name=&quot;sucesso&quot; path=&quot;cadastro.confirmar&quot;/&gt;
			&lt;forward name=&quot;cancelado&quot; path=&quot;cadastro.jsp&quot;/&gt;
		&lt;/action&gt;

bom, acho q deve te ajudar.....

Criado 29 de novembro de 2006
Ultima resposta 29 de nov. de 2006
Respostas 1
Participantes 2