Struts 2.1.2 Validation

Galera,

Tou tentando usar o validation do struts e não consigo.
O nome da action é CondominioAction e coloquei o arquivo de validation, CondominioAction-validation.xml, no mesmo pacote da action.
No log não aparece nada sobre CondominioAction-validation.xml.

O que eu tou fazendo errado? o.O

CondominioAction-validation.xml

<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="condominio.nome">
        <field-validator type="requiredstring">
            <message>O campo nome é obrigatório</message>
        </field-validator>
    </field>
    <field name="condominio.cnpj">
        <field-validator type="int">
            <message>Insira somente numeros no CNPJ.</message>
        </field-validator>
    </field>
</validators>

cadastrar.jsp

<%-- 
    Document   : cadastrar
    Created on : 18/07/2008, 13:34:30
    Author     : Administrador
--%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<%@page contentType="text/html" pageEncoding="windows-1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro de Condomínio</title>
        <s:head/>
        <sx:head/>
    </head>
    <body>
        <center>
            <br><h4>Condomínio > Cadastrar</h4><br>
            <s:actionmessage/>
            <s:div name="divCondominio" cssStyle="align:center;">                
                <s:form id="frmCondominio" theme="xhtml" action="/condominio/condominio-save.action" validate="true" >
                    <s:textfield required="true" name="condominio.nome" label="Razao Social" size="50" />
                    <s:textfield name="condominio.nomefantasia" label="Nome Fantasia" size="50"/>
                    <sx:autocompleter forceValidOption="true" key="tipo.descricao" delay="250" label="Tipo" href="/logos/admin/condominio/ajax/tipo-jsontipos.action" cssStyle="width:150px;"/>
                    <sx:autocompleter forceValidOption="true" key="natureza.descricao" delay="250" label="Natureza" href="/logos/admin/condominio/ajax/natureza-jsonNaturezas.action" cssStyle="width:150px;"/>
                    <s:textfield name="condominio.cnpj" label="CNPJ" tooltip="CNPJ (somente números)" size="14" maxLength="14"/>
                    <s:textfield name="condominio.ie" tooltip="Inscrição Estadual" label="I.E"/>
                    <s:textfield name="condominio.unidades" label="Unidades" size="4" maxLength="4"/>
                    <s:textfield name="condominio.endereco" label="Endereço" size="50" maxLength="150"/>
                    <s:textfield name="condominio.pontoreferencia" label="Ponto de referência" size="50"/>
                    <s:textfield name="condominio.cep" label="CEP" size="8" maxLength="8" tooltip="Somente número"/>
                    <s:textfield name="condominio.bairro" label="Bairro" size="30" maxLength="70"/>
                    <s:textfield name="condominio.cidade" label="Cidade" size="50" maxLength="150"/>
                    <s:select label="Estado"
                              name="condominio.estado"
                              headerKey="BA" headerValue="BA"
                              list="#{'Acre':'AC','Alagoas':'AL','Amapá':'AP','Amazonas':'AM','Bahia':'BA','Ceará':'CE','Distrito Federal':'DF','Goiás':'GO','Espírito Santo':'ES','Maranhão':'MA','Mato Grosso':'MT','Mato Grosso do Sul':'MS','MinasGerais':'MG','Pará':'PA','Paraiba':'PB','Paraná':'PR','Pernambuco':'PE','Piauí':'PI','Rio de Janeiro':'RJ','Rio Grande do Norte':'RN','Rio Grande do Sul':'RS','Rondônia':'RO','Rorâima':'RR','São Paulo':'SP','SantaCatarina':'SC','Sergipe':'SE','Tocantins':'TO'}"
                              value="condominio.estado"
                              required="true"
                              />
                    <s:textfield name="condominio.telefone" label="Telefone"/>
                    <s:textfield name="condominio.email" label="E-mail" size="50" maxLength="150"/>
                    <s:textarea  name="condominio.observacao" label="Observações" rows="3" cols="38"/>
                    <s:submit value="Cadastrar"/>
                </s:form>
            </s:div>
        </center>
    </body>
</html>

no firebug da o seguitne:
validateForm_frmCondominio is not defined
http://localhost:8080/logos/jsp/condominio/cadastrar.jsp/event/an9CNLLiAtj3mKIBeW%2BnJQ%3D%3D
Line 2

Já procurei no site do struts, tentei fazer igual masnao deu certo , :expressionless:

o.O

Tente fazer o seguinte :
deixe o form somente com o seguinte :
<s:form theme=“xhtml”>

e no submit coloque
<s:submit value=“cadastrar” method=“save”>

Herrera

[quote=Herrera]Tente fazer o seguinte :
deixe o form somente com o seguinte :
<s:form theme=“xhtml”>

e no submit coloque
<s:submit value=“cadastrar” method=“save”>
[/quote]

Herrera,

Fiz isto mas ele simplesmente volta pra pagina cadastrar.jsp e nada acontece

o.O

como está o seu action, e o struts.xml ?

Herrera

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
...
    <package name="condominio" extends="struts-default" namespace="/condominio" >
        <action name="condominio-*" method="{1}" class="condominioAction">
            <result name="error">/jsp/condominio/cadastrar.jsp</result>
            <result name="input">/jsp/condominio/cadastrar.jsp</result>
            <result name="confirmar">/jsp/condominio/confirmar.jsp</result>
            <result>/jsp/condominio/cadastrar.jsp</result>
        </action>
    </package>
...
</struts>

CondominioAction

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cycle.logos.view.actions.condominio;


import com.cycle.logos.domain.condominio.Condominio;
import com.cycle.logos.domain.condominio.Natureza;
import com.cycle.logos.domain.condominio.Tipo;
import com.cycle.logos.domain.repositories.condominio.CondominioRepository;
import com.cycle.logos.domain.repositories.condominio.NaturezaRepository;
import com.cycle.logos.domain.repositories.condominio.TipoRepository;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;

public class CondominioAction extends ActionSupport {

    public CondominioRepository repository;
    public TipoRepository tipoRepository;
    public NaturezaRepository naturezaRepository;
    
    public Tipo tipo;
    public Natureza natureza;
    
    public Condominio entity;
    private List<Condominio> entities;
    public String cadastrar() {
        return "confirmar";
    }
    public String save() {
        try {
            tipo = tipoRepository.tipoWithCodigo(tipo.getCodigo());
            natureza = naturezaRepository.naturezaWithCodigo(natureza.getCodigo());
            
            entity.setTipo(tipo);
            entity.setNatureza(natureza);
            entity = repository.save(entity);
            addActionMessage("O condomínio foi cadastrado com sucesso.");
            return SUCCESS;
        } catch (Exception e) {
            return ERROR;
        }
    }

    public NaturezaRepository getNaturezaRepository() {
        return naturezaRepository;
    }

    public void setNaturezaRepository(NaturezaRepository naturezaRepository) {
        this.naturezaRepository = naturezaRepository;
    }

    public TipoRepository getTipoRepository() {
        return tipoRepository;
    }

    public void setTipoRepository(TipoRepository tipoRepository) {
        this.tipoRepository = tipoRepository;
    }

    public Condominio getCondominio() {
        return entity;
    }

    public void setCondominio(Condominio entity) {
        this.entity = entity;
    }

    public CondominioRepository getRepository() {
        return repository;
    }

    public void setRepository(CondominioRepository repository) {
        this.repository = repository;
    }

    public String show() {
       entity = repository.entityWithCodigo(entity.getCodigo());
       return entity == null?ERROR:SUCCESS;
    }

    public String remove() {
        repository.remove(entity);
        return entity == null?ERROR:SUCCESS;
    }
    
    public List<Condominio> getCondominios() {
        list();
        return entities;
    }
    
    public String list() {
        entities = repository.list();
        return "list";
    }
}

Bem estranho mesmo …
andei dando uma pesquisada, e a unica coisa diferente que achei eh o nome da action que esta errada em struts.xml. Talvez seja alguma coisa com namespace . Faca dois teste no form coloque namespace = /condominio,
e no action definida no xml coloque : action name=“condominio”.
acabei de achar uma coisa interessante, eh a validacao no cliente usando jquery :

http://www.viniciusaraujo.net/2008/04/validao-cliente-utilizando-o-plugin.html

Herrera