Validação Struts

olá pessoal…
eu sei que existe diversos materiais de struts na net q explica sobre validação…
mais estou com muita dificuldade em entender toda aquela configuração maluca…
e tbm nao tenho opçao para escolher outro framework… pois o sistema aqui na empresa foi desenvolvido com ele…

bom vou postar meu código aqui… se alguem puder me ajudar ficaria muito grato…

1º - Meu JSP
É uma lista de telefones, assim que o usuario clicar no botão alterar sera necessario fazer determinadas validações antes que seja realizado o update…

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<html:html locale="true">
<head>
	<title></title>
	<link href="../includes/css.css" rev="stylesheet" rel="stylesheet">
	<script>
		function update(id) { 
			form = document.forms[0];
			form.action = 'updateTelefones.do';
			
			form.cpf.value = eval('form.cpf'+id+'.value');
			form.nome.value = eval('form.nome'+id+'.value');
			form.ddd_res.value = eval('form.ddd_res'+id+'.value');
			form.fone_res.value = eval('form.fone_res'+id+'.value');
			form.ddd_cel.value = eval('form.ddd_cel'+id+'.value');
			form.fone_cel.value = eval('form.fone_cel'+id+'.value');
			form.ddd_com.value = eval('form.ddd_com'+id+'.value');
			form.fone_com.value = eval('form.fone_com'+id+'.value');
			form.ddd_outro.value = eval('form.ddd_outro'+id+'.value');
			form.fone_outro.value = eval('form.fone_outro'+id+'.value');
			
			form.submit();	
		}
	</script>
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<table width="100%" cellpadding="4" cellspacing="1" border="0">
	<c:choose>
	<c:when test="${empty phonesList}">
		<tr class="cor1">
			<td align="left" colspan="10">Nenhum telefone encontrado.</td>
		</tr>
    </c:when>
    
    <c:otherwise>
		<html:form  action="/updateTelefones" method="POST">
			<html:hidden property="cpf"/>
			<html:hidden property="nome"/>
			<html:hidden property="ddd_res"/>	
			<html:hidden property="fone_res"/>
			<html:hidden property="ddd_cel"/>
			<html:hidden property="fone_cel"/>
			<html:hidden property="ddd_com"/>
			<html:hidden property="fone_com"/>
			<html:hidden property="ddd_outro"/>
			<html:hidden property="fone_outro"/>
    	<!-- Repetição -->
    	<c:forEach var="phones" items="${phonesList}" varStatus="loop">
    		<c:set var="line" value="${(loop.count)}"/>
    		<tr class="cor<c:out value="${(loop.count%2)+1}"/>">
				<td align="center">
					<c:out value="${phones.cpf}"/>
					<input type="hidden" name="cpf<c:out value="${line}"/>" value="<c:out value="${phones.cpf}"/>">
				</td>
				<td><img src="../images/ico16_cliente.gif" alt="" width="16" height="16" border="0"><c:out value="${line}"/></td>
				<td>
					<c:out value="${phones.nome}"/>
					<input type="hidden" name="nome<c:out value="${line}"/>" value="<c:out value="${phones.nome}"/>">
				</td>
				<td class="NoPad" align="center">
					<input type="Text" class="txt" maxlength="2" name="ddd_res<c:out value="${line}"/>" value="<c:out value="${phones.ddd_res}"/>" style="width:20px; text-align:center;"/>
					<input type="Text" class="txt" maxlength="8" name="fone_res<c:out value="${line}"/>" value="<c:out value="${phones.fone_res}"/>"  style="width:60px; text-align:center;"/>
				</td>
				<td class="NoPad" align="center">
					<input type="Text" class="txt" maxlength="2" name="ddd_cel<c:out value="${line}"/>" value="<c:out value="${phones.ddd_cel}"/>"  style="width:20px; text-align:center;"/>
					<input type="Text" class="txt" maxlength="8" name="fone_cel<c:out value="${line}"/>" value="<c:out value="${phones.fone_cel}"/>"  style="width:60px; text-align:center;"/>
				</td>
				<td class="NoPad" align="center">
					<input type="Text" class="txt" maxlength="2" name="ddd_com<c:out value="${line}"/>" value="<c:out value="${phones.ddd_com}"/>"  style="width:20px; text-align:center;"/>
					<input type="Text" class="txt" maxlength="8" name="fone_com<c:out value="${line}"/>" value="<c:out value="${phones.fone_com}"/>"  style="width:60px; text-align:center;"/>
				</td>
				<td class="NoPad" align="center">
					<input type="Text" class="txt" maxlength="2" name="ddd_outro<c:out value="${line}"/>" value="<c:out value="${phones.ddd_outro}"/>"  style="width:20px; text-align:center;"/>
					<input type="Text" class="txt" maxlength="8" name="fone_outro<c:out value="${line}"/>" value="<c:out value="${phones.fone_outro}"/>"  style="width:60px; text-align:center;"/>
				</td>
				<td align="center">
					<input type="button" title="Alterar" class="BtPadrao" value="" style="width:22; background-image:url('../images/ico16_ok.gif');" onclick="javascript:update('<c:out value="${line}"/>')">
				</td>
			</tr>
		</c:forEach>
	</html:form>
	</c:otherwise>
	</c:choose>
	<!-- Repetição -->
	<tr class="cinza">
		
		<td width="100"></td>
		<td width="16"></td>
		<td></td>
		<td width="90"></td>
		<td width="90"></td>
		<td width="90"></td>
		<td width="90"></td>
		<td width="22"></td>
	</tr>
</table>
</body>
</html:html>

2º Meu Arquivo validation.xml

A principio estou tentando fazer com que seja necessario preencher todos os campos de telefones e com tamanho minimo do ddd de 2 caracteres e fone com 8

<?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="updateTelefonesForm">
				<field property="ddd_res" depends="required, minlength">
					<arg0 key="ddd"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>2</var-value>
					</var>
				</field>
				<field property="fone_res" depends="required, minlength">
					<arg0 key="fone"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>8</var-value>
					</var>
				</field>
				<field property="ddd_cel" depends="required, minlength">
					<arg0 key="ddd"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>2</var-value>
					</var>	
				</field>
				<field property="fone_cel" depends="required, minlength">
					<arg0 key="fone"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>8</var-value>
					</var>	
				</field>
				<field property="ddd_com" depends="required, minlength">
					<arg0 key="ddd"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>2</var-value>
					</var>				
				</field>
				<field property="fone_com" depends="required, minlength">
					<arg0 key="fone"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>8</var-value>
					</var>	
				</field>
				<field property="ddd_outro" depends="required, minlength">
					<arg0 key="ddd"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>2</var-value>
					</var>
				</field>								
				<field property="fone_outro" depends="required, minlength">
					<arg0 key="fone"/>
					<var>
						<var-name>minlenght</var-name>
						<var-value>8</var-value>
					</var>
				</field>
    		</form>
  		</formset>
</form-validation>

3º Arquivo struts-config.xml

...
		<form-bean name="updateTelefonesForm" type="org.apache.struts.validator.DynaValidatorForm">
			<description>Form com dados update de Telefones</description>
			<form-property name="cpf" type="java.lang.String"/>
			<form-property name="nome" type="java.lang.String"/>
			<form-property name="ddd_res" type="java.lang.String"/>
			<form-property name="fone_res" type="java.lang.String"/>
			<form-property name="ddd_cel" type="java.lang.String"/>
			<form-property name="fone_cel" type="java.lang.String"/>
			<form-property name="ddd_com" type="java.lang.String"/>
			<form-property name="fone_com" type="java.lang.String"/>
			<form-property name="ddd_outro" type="java.lang.String"/>
			<form-property name="fone_outro" type="java.lang.String"/>
		</form-bean>


...
	<action path="/updateTelefones" 
					type="br.com.cmsoftware.collection.web.actions.gestao.ManutTelefonesAction" 
					parameter="update"
					name="updateTelefonesForm"
					scope="request"
					validate="true"
					input="/erroTelefone.jsp">
			<forward name="failure" path="/erroTelefone.jsp" redirect="true"/>		
			<forward name="ok" path="/manutencaoTelefones.list.jsp" redirect="true"/>
		</action>
...

4º Meu JSP erro

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<html:html locale="true">
<head>
<title></title>
<html:base/>
</head>
<body bgcolor="white">
    <font face="Comic Sans MS" size="3">
        <logic:messagesPresent>
            <ul>
                <html:messages id="error">
                    <li><bean:write name="error"/></li>
                </html:messages>
            </ul>
        </logic:messagesPresent>
    <br/>
    </font>
</body>
</html:html>

esta acontecendo que quando eu deixo todos os campos em branco… a mensagem aparece de boa…
agora quando deixo um ou outro campo sem preencher apresenta a seguinte mensagem…

{0}O campo DDD Não pode ser menor que null caracteres 
{0}O campo Fone Não pode ser menor que null caracteres 
{0}O campo DDD Não pode ser menor que null caracteres 
{0}O campo Fone Não pode ser menor que null caracteres 
{0}O campo DDD Não pode ser menor que null caracteres 
{0}O campo Fone Não pode ser menor que null caracteres 
{0}O campo DDD Não pode ser menor que null caracteres 
{0}O campo Fone Não pode ser menor que null caracteres 

outro problema eh quando tento digitar todos os digitos com zero…
na minha classe VO eu tentei implementar o metodo validate…

[code]
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
//o super.validate chama validações do validation.xml
ActionErrors errors = new ActionErrors();

		//se nao cair no validation.xml vai executar aqui
		if (ddd_res == null || ddd_res.equals("00") || ddd_res.length() < 2 ) 
		{
			errors.add("ddd_res", new ActionError("error.ddd"));
		} 
		if (fone_res == null || fone_res.equals("00000000") || fone_res.length() < 8 ) 
		{
			errors.add("fone_res", new ActionError("error.fone"));
		} 
		if (ddd_cel == null || ddd_cel.equals("00") || ddd_cel.length() < 2 ) 
		{
			errors.add("ddd_cel", new ActionError("error.ddd"));
		} 
		if (fone_cel == null || fone_cel.equals("00000000") || fone_cel.length() < 8 ) 
		{
			errors.add("fone_cel", new ActionError("error.fone"));
		}			
		if (ddd_com == null || ddd_com.equals("00") || ddd_com.length() < 2 ) 
		{
			errors.add("ddd_com", new ActionError("error.ddd"));
		} 
		if (fone_com == null || fone_com.equals("00000000") || fone_com.length() < 8 ) 
		{
			errors.add("fone_com", new ActionError("error.fone"));
		}		
		if (ddd_outro == null || ddd_outro.equals("00") || ddd_outro.length() < 2 ) 
		{
			errors.add("ddd_outro", new ActionError("error.ddd"));
		} 
		if (fone_outro == null || fone_outro.equals("00000000") || fone_outro.length() < 8 ) 
		{
			errors.add("fone_outro", new ActionError("error.fone"));
		} 
		
		//returna os erros para a pagina de "input" cadastrada no struts-config.xml  		
		return errors;	
	}[/code]

Minha action…

public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		ActionMessages errors = new ActionMessages();
		
		try {
			CompanyVo company = SessionUtils.getUser(request);
			if (null == company) {
				throw new BusinessException("Sessão inválida. Efetue o login novamente");
			}
		
			PhonesVo phones = new PhonesVo();
			BeanUtils.copyProperties(phones, form);
			phones.setIdEmpresa(company.getId());
			
			//List phonesList = (List) request.getSession().getAttribute("phonesList");
			
			if (errors.isEmpty()) {
				int updatePhones = new Phones().getUpdate(phones);
				List phonesList = new Phones().getPhones(company.getId());
				request.setAttribute("phonesList", phonesList);		
			}
				
			

		} catch (BusinessException e) {
			errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.msg", e.getMessage()));
		} catch (Exception e) {
			log.error(null, e);
			errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.msg", "Problemas ao atualizar os telefones."));
		}
		if (!errors.isEmpty()) {
			saveErrors(request, errors);
			return (mapping.findForward("failure"));
		}
		return (mapping.findForward("ok"));
	}

quando digito tudo zero o que a mensagem que apresente eh a seguinte

O campo DDD Não pode ser menor que null caracteres O campo Fone Não pode ser menor que null caracteres O campo DDD Não pode ser menor que null caracteres O campo Fone Não pode ser menor que null caracteres O campo DDD Não pode ser menor que null caracteres O campo Fone Não pode ser menor que null caracteres O campo DDD Não pode ser menor que null caracteres O campo Fone Não pode ser menor que null caracteres

isso acontece tbm quando digito somente em um campo digitos “0”…