Duvida na chamada de erro pelo validate Struts

Olá ,

uma duvida estou com problema quando tento usar o validate do struts
pois cai no erro mas não chama a pagina de erro que define no config-struts…
Não sei se fiz algo de errado …???
Se alguém puder me ajudar agradeceria…

abs



struts-config.xml


<global-forwards>


<forward name="erro" path="/home/msgerro.jsp" />

</global-forwards>   



FOrm.....


public class ClienteForm  extends ActionForm {


	public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
		
            ActionErrors erros = new ActionErrors();


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


}

----

action do struts


public class ClienteAction extends Action {
	
	public ActionForward execute(ActionMapping mapping, 
	                             ActionForm actionForm,
			                     HttpServletRequest request, 
			                     HttpServletResponse response) {
    	ActionForward forward = null; 
        
        ClienteForm form = (ClienteForm) actionForm;	
       		                     	
        try{
		
            
            System.out.println("exemplo(ProcessoAction 2)");
           
            request.setAttribute("ClienteForm", form);
            
        	System.out.println("exemplo(2)");
			forward = mapping.findForward("sucesso");

		}catch (Exception e) {
			System.out.println("erro ="+e);
		        return null;
		}
		return forward;	
  }
}

Colega,

voce está definindo a ação para “sucesso”:

forward = mapping.findForward("sucesso");

mas não está definindo o mesmo para erro:

return null;

onde deveria ser

forward = mapping.findForward("erro");

[]´s

E ae,

Na verdade você está fazendo a validação do form de forma errada.

Deveria ser assim :

	<action path="/test"
		type="org.example.MyAction"
		name="MyForm"
		scope="request"
		validate="true"
		input="/test.jsp"
		parameter="submit"/>

O necessário para a validação do seu actionform, é simplesmente a tag “validate=true” e o “input=pagina do dispatch de erro”.

Resumindo o seu form será validado antes mesmo da requisição entrar em sua action.

Abraços,

Outro detalhe que percebí olhando seu código:

Se vc possui um form na tela ao qual vc deseja que ao retornar da action, estes campos voltem preenchidos, use o actionform e não objetos de request.

Se vc tem no seu jsp o form com os campo :

<html:form ... >
&lt;html:text property="name" /&gt;<br/>
&lt;html:text property="secondName" /&gt;<br/>
&lt;/html:form&gt;

… Após você tratar o seu objeto pojo, seja recuperar do banco ou o que for feito, simplesmente popule o seu form com os dados do seu objeto.
Exemplo:

try {
	ClienteForm form = (ClienteForm) actionForm;
	Cliente cliente = new Cliente();
	ClienteDao dao = new ClienteDao();
	dao.procurarPOrId(form.getId());
	form.setName(cliente.getName);
	form.setSecondName(cliente.getSecondName());
	form.setId(cliente.getId());
	return mapping.findForward("sucesso");
catch(Exception e) {
	logger.fatal(e);
	return mapping.findForward("falha");
}

O seu jsp que está relacionado ao forward de sucesso terá seu form carregado com os dados do seu actionform.

Qualquer dúvida, poste aí …

Abraço,

Olá…

minha duvida continua pois quando entra no metodo validate e verifica o metodo VerificaDiaMes retorna false e deveria ir pra tela de erro…

abs

Eu estou terminando um mini tutorial de struts.

Hoje ainda posto aqui …

Com certeza irá resolver seu problema;

Abraço,