Validação no Struts

4 respostas
Bruno_Cardoso

Tenho a seguinte acção definida no struts:

<action path="/loginSubmit" type="org.metallum.actions.LoginAction" name="loginForm" scope="request" validate="true" input="/templates/main.vm"> <forward name="sucess" path="/news.jsp" redirect="true"/> </action>

Esta acção vai ser executado atraves do submit de um form de login, caso o metodo validate do form passar sem erros a pagina é redireccionada para news.jsp… a minha questao é: e se o metodo validação retornar erros? como posso configurar um redirect em caso de erro?

4 Respostas

thiagorani

Dentro do seu action

if(facade.validaUsuarioSenha(cform.getUsuario(),cform.getSenha())){
      			
      			//Collection usuario = facade.getUsuario(cform.getUsuario(),cform.getSenha());
      			//Collection modulos = facade.getPerfilUsuario(cform.getUsuario(),cform.getSenha());
      			
      			req.getSession(true).setAttribute("usuario", facade.getUsuario(cform.getUsuario(),cform.getSenha()));      		
      			req.getSession(true).setAttribute("modulo", facade.getPerfilUsuario(cform.getUsuario(),cform.getSenha()));      		
      			return mapping.findForward("sucesso");      	
      		}
      		else{
      	
      			erros.add(ActionErrors.GLOBAL_ERROR, new ActionError("errors.senha"));
      			saveErrors(req, erros);
      			return mapping.findForward("excecao");
      
      		}

mapeia a excecaoo no struts-config.xml

ricardolecheta

complementando o que o thiagorani disse,

o mais correto é sobrescrever o método validate da FormBean

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
	{
		// o super.validate chama validações do validation.xml
		ActionErrors errors = super.validate(mapping, request);
		
		// se nao cair no validation.xml vai executar aqui		
			 if(deu erro) {
				 errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.name", "Deu erro"));
			 }
			 
		// returna os erros para a pagina de "input" cadastrada no struts-config.xml
		return errors;
	}
Bruno_Cardoso

thiagorani, o seu exemplo não é bem o que eu queria, porque assim estaria a fazer a validação na Action, e não é isso que quero, eu faço a validação no metodo validate do FormBean, e caso dê erro, ele nem sequer chega a ir à action…

quanto ao exemplo do ricardolecheta, acho que também não é bem isso porque caso dê erro ele vai ficar na página de “input” do form… e eu queria era mando-lo para uma terceira página…

thiagorani

Voce quer fazer um forward no validate do formBean?

Será que é correto? O validate válida os dados do formulário e retorna erro para o mesmo, da onde partiu a ação!

Se tivesse o response no validate, além do request, daria pra tentar fazer:

getServletContext().getRequestDispatcher("url").forward(request, response);
Criado 27 de novembro de 2003
Ultima resposta 28 de nov. de 2003
Respostas 4
Participantes 3