Validação no Struts

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

[code]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;
	}

}
[/code]

CadastrarCliente Action

[code]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");
	}
	
}

}
[/code]

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

[code]<?xml version="1.0" encoding="ISO-8859-1" ?>

<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"/>

[/code]

Exception - ERRO

[code]javax.servlet.ServletException: Exception in JSP: /pages/CadastrarCliente.jsp:19

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

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:resetReset</html:reset>
17: <html:errors property=“errnome” />
18: <html:errors property=“errcpf” />
19: <bean:message key=“error.nome”/>
20: </html:form>
21:
22:

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)
[/code]

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