Validação no Struts

1 resposta
emanuell

Estou desenvolvendo uma aplicação simples com struts e estou com alguns problemas.

Queria que quando realizar o validate no ActionForm retornasse o erro para a jsp que chamou e apresentando o erro. Só que nao estou conseguindo fazer.

Uma outra coisa, nao estou conseguindo exibir nenhuma chave no jsp (Exception).

Segue os codigos.

CadastrarCliente JSP
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<html:html>
	<head>
		<title>bakakba</title>
		<html:base/>
	</head>
<body>
	
<html:form action="cadastrarCliente.do">
	Nome:<html:text property="nome" size="25" /><html:errors property="nome"/><br>
	CPF:<html:text property="cpf" size="25"/><html:errors property="cpf"/><br>
	<html:submit>Enviar</html:submit>
     <html:reset>Reset</html:reset>
     <html:errors property="errnome" />
	<html:errors property="errcpf" /> 
	<bean:message key="error.nome"/>
</html:form>

</body>

</html:html>
CadastrarCliente ActionForm
package struts;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.validator.DynaValidatorActionForm;
import org.apache.struts.validator.DynaValidatorForm;

public class CadastrarClienteForm extends ActionForm {
	
		private String nome;
		private String cpf;
		
		public ActionErrors validate(ActionMapping map, HttpServletRequest req) {
			ActionErrors erros = new ActionErrors();
			
			if ((cpf == null) || ((cpf.length() < 1)) ){
				erros.add("errcpf", new ActionMessage("error.cpf"));
				
			}
			if ((nome == null) || (nome.length() < 1)) {
				erros.add("errnome", new ActionMessage("error.nome"));
				
			}

			return erros;
		}
		
		public void reset(ActionMapping map, HttpServletRequest req) {
			nome = "";
			cpf = "";
		}

		public String getCpf() {
			return cpf;
		}

		public void setCpf(String cpf) {
			this.cpf = cpf;
		}

		public String getNome() {
			return nome;
		}

		public void setNome(String nome) {
			this.nome = nome;
		}
		
		

}
CadastrarCliente Action
package struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import persistencia.bean.ClienteTO;
import persistencia.dao.ClienteDAO;

public class CadastrarClienteAction extends Action {
	
	public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res) {
		
		ClienteTO bean = new ClienteTO();
		CadastrarClienteForm formcliente = (CadastrarClienteForm)form;
		
		bean.setCpf(formcliente.getCpf());
		bean.setNome(formcliente.getNome());
		
		ClienteDAO dao = new ClienteDAO();
		if (dao.save(bean)) {
			
			return map.findForward("sucesso");
		} else {
			return map.findForward("falhou");
		}
		
	}
}
Application Resources
errors.header=<UL>
errors.prefix=<LI>
errors.suffix=</LI>
errors.footer=</UL>
errors.invalid={0} is invalid.
errors.maxlength={0} can not be greater than {1} characters.
errors.minlength={0} can not be less than {1} characters.
errors.range={0} is not in the range {1} through {2}.
errors.required={0} is required.
errors.byte={0} must be an byte.
errors.date={0} is not a date.
errors.double={0} must be an double.
errors.float={0} must be an float.
errors.integer={0} must be an integer.
errors.long={0} must be an long.
errors.short={0} must be an short.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
errors.cancel=Operation cancelled.
errors.detail={0}
errors.general=The process did not complete. Details should follow.
errors.token=Request could not be completed. Operation is not in sequence.
welcome.title=Struts Application
welcome.heading=Struts Applications in Netbeans!
welcome.message=It's easy to create Struts applications with NetBeans.
error.cpf=CPF incorreto
error.nome=Nome incorreto
struts-config
<?xml version="1.0" encoding="ISO-8859-1" ?>

<struts-config>

	<form-beans>
		<form-bean name="cadastrarClienteForm" type="struts.CadastrarClienteForm" />
	</form-beans>

	<action-mappings>
	
		<action path="/cadastrarCliente" 
				type="struts.CadastrarClienteAction" 
				name="cadastrarClienteForm"
				validate="true"
				scope="session"
				input="/pages/CadastrarCliente.jsp" >
				<forward name="sucesso" path="/pages/sucesso.jsp" />"
				<forward name="falhou" path="/pages/erro.jsp" />
		</action>
		
		<action path="/welcome" forward="/pages/CadastrarCliente.jsp"/>
		
	
	</action-mappings>
	<message-resources parameter="ApplicationResources"/>
</struts-config>
Exception - ERRO
javax.servlet.ServletException: Exception in JSP: /pages/CadastrarCliente.jsp:19

16:      <html:reset>Reset</html:reset>
17:      <html:errors property="errnome" />
18: 	<html:errors property="errcpf" /> 
19: 	<bean:message key="error.nome"/>
20: </html:form>
21: 
22: </body>


Stacktrace:
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

org.apache.jasper.JasperException: Exception in JSP: /pages/CadastrarCliente.jsp:19

16:      <html:reset>Reset</html:reset>
17:      <html:errors property="errnome" />
18: 	<html:errors property="errcpf" /> 
19: 	<bean:message key="error.nome"/>
20: </html:form>
21: 
22: </body>


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:99)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:82)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:51)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

javax.servlet.ServletException: Missing message for key "error.nome" in bundle "(default bundle)" for locale pt_BR
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:843)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
	org.apache.jsp.pages.CadastrarCliente_jsp._jspService(CadastrarCliente_jsp.java:91)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:99)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:82)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:51)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

javax.servlet.jsp.JspException: Missing message for key "error.nome" in bundle "(default bundle)" for locale pt_BR
	org.apache.struts.taglib.bean.MessageTag.doStartTag(MessageTag.java:230)
	org.apache.jsp.pages.CadastrarCliente_jsp._jspx_meth_bean_message_0(CadastrarCliente_jsp.java:400)
	org.apache.jsp.pages.CadastrarCliente_jsp._jspx_meth_html_form_0(CadastrarCliente_jsp.java:198)
	org.apache.jsp.pages.CadastrarCliente_jsp._jspx_meth_html_html_0(CadastrarCliente_jsp.java:119)
	org.apache.jsp.pages.CadastrarCliente_jsp._jspService(CadastrarCliente_jsp.java:84)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:99)
	org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:82)
	org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:51)
	org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
	org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

1 Resposta

emanuell

Galera, depois de tantas respostas, eu achei o erro.
No struts-config.xml eu nao passei o caminho do pacote completo do ApplicationResources :roll:

Criado 14 de fevereiro de 2007
Ultima resposta 17 de fev. de 2007
Respostas 1
Participantes 1