Struts dificuldade (Resolvido)

13 respostas
F

Galera estou com uma dificuldade no struts

para a validacao de dados…

eu criei um form que tem uma validacao… o struts valida certinho caso eu deiche de preencher algo ou preencha errado…

porem quando eu envio o formulario para abrir uma pagina de successo… o forward nao funciona e me abre uma pagina em branco (nenhum forward esta funcionando)

gostaria de saber se alguem pode me ajudar…

Obrigado.

13 Respostas

V

Já verificou se o struts-config está correto ?

F
bom... meu struts ta assim
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> 


<struts-config>
              
		 
		<form-beans>
			<form-bean
				name="login"
				type="app.RegisterForm"/>
		</form-beans>

		<action-mappings>
				<action 
					path="/Logon"
					type="org.apache.struts.actions.ForwardAction"
					parameter="/index.vm"/>
			
			<action 
				path="/conectar"
				type="app.RegisterAction"
				name="login"    
				scope="request"
				validate="true"
				input="/index.vm">		
					<forward
					name="success"
					path="/templates/success.vm"/>
			</action>
			

		</action-mappings>
		
				 <message-resources parameter="resources.application" />
				 
		<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
				<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
		</plug-in>
</struts-config>
alves.Felipe

posta o método do seu action…
isso ta com cara que o name do forward esta errado

F
intao... o name ta certo T_T pq se eu tiro a validacao funciona normal oO sei la ooqq é ^^
package app;
import org.apache.struts.action.*;
import javax.servlet.http.*;
public class RegisterAction extends Action
{
	
	public ActionForward perform(ActionMapping mapping,
								 ActionForm form,
								 HttpServletRequest request,
								 HttpServletResponse response)
	{
			String firstName = ((RegisterForm)form).getFirstName();
			String lastName =((RegisterForm)form).getLastName();
			System.out.println("Primeiro Nome: "+firstName+"Sobrenome: "+lastName);
			return (mapping.findForward("success"));	
			
	}
}

e o form ta

package app;



import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.validator.ValidatorForm;




public class RegisterForm extends ValidatorForm {
	
	private static final long serialVersionUID = 1L;
	
	protected int id = 0 ;
	
	protected String firstName =null;
	
	protected String lastName = null;
	
	public String getFirstName(){
		return this.firstName;
	}
	
	public void setFirstName(String firstName){
		this.firstName = firstName;
		setId();
	}
	
	public String getLastName(){
		return this.lastName;
	}
	
	public void setLastName(String lastName){
		this.lastName = lastName;
	}
	
	public int getId(){
		return this.id;
	}
	
	public void setId(){
		this.id++;
	}	
	
	public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request)
	{

			ActionErrors errors = new ActionErrors();

			if ((firstName == null) || (firstName.length() < 1))
				errors.add("Nome", new ActionMessage("login.label.firstName"));

			if ((lastName == null) || (lastName.length() < 1))
				errors.add("Sobrenome", new ActionMessage("login.label.lastName"));

			return errors;

	}	
}
ignacio83

Quando ocorre um erro de validação ele deve redirecionar para o path configurado no input… o caminho está correto?

F

intao… eu nao estou usando jsp

estou usando velocity… sem a validacao o forward funciona normalmente de uma pagina para outra… ele vai volta certinho… so que quando coloquei a validacao ele nao vai

F

sim… se ocorre algum erro ele redireciona para o index.vm e aplica qual erro esta acontecendo… até ai esta funcionando… so que quando nao occorre nenhum erro… ele me envia para uma pagina em branco… conectar.do… so q a pagina esta em branco… ele nao me direciona para a pagina conectar.do (success.vm)
intende?

alves.Felipe

cara… como que vc faz para chamar o validade?
eu faço assim no meu método do Action:

ActionErrors errors = cForm.validate(mapping, request);
if (errors.isEmpty())
F

para chamar o validate fiz:

# public ActionErrors validate(ActionMapping mapping,  
#             HttpServletRequest request)  
#     {  
#   
#             ActionErrors errors = new ActionErrors();  
#   
#             if ((firstName == null) || (firstName.length() < 1))  
#                 errors.add("Nome", new ActionMessage("login.label.firstName"));  
#   
#             if ((lastName == null) || (lastName.length() < 1))  
#                 errors.add("Sobrenome", new ActionMessage("login.label.lastName"));  
#   
#             return errors;  
#   
#     }
alves.Felipe

sim eu tinha visto o seu código… queria saber como vc faz para chegar até esse método…
e depois… vc retorna o ActionErrors pra onde?
quero ver se tem algum modo diferente do que eu faço…

F
bom tenho 1 arquivo validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

<form-validation>
   <formset>
      	  <form name="login">
			<field property="firstName" depends="required">
				<arg key="login.label.firstName"/>
			</field>
			<field property="lastName" depends="required">
				<arg key="login.label.lastName"/>
			</field>
		</form>
   </formset>
</form-validation>

e depois tenho o arquivo aplication.properties que vai imprimir o erro
de nome faltando ou sobrenome

F

intao… o problema q estou tendo e que quando eu coloco os dados validos ele me manda para a proxima pagina… so que ao inves dele me mandar para success.vm ele esta me mandando para uma pagina em branco

F

[size=18]aaaaaaaaffffffffffffffffffffffffff[/size]

nao acrediittoooo

o erro estava aqui: public ActionForward [color=red]perform[/color](ActionMapping mapping,

o nome precisava SER execute

agora pq nao tenho nem ideia T_T
se alguem souber me fale plz ^^

ate+

Criado 17 de fevereiro de 2011
Ultima resposta 17 de fev. de 2011
Respostas 13
Participantes 4