Problema com Validação no Struts 2

Pessoal, estou com um problema de validação no struts com o componete
<s:select>, pois tenho um action que popula um a lista com um javabean qualquer e como resultado gerar um formulário
de cadastro de cliente. Até ai tudo bem !! … Porém, este cadastro de cliente possui algums campo obrigatórios que quando
passa pela validação do framework e retorna os <s:fielderror> o list não está mais populado ficando o <s:select> vazio !!!

Alguem tem idéia de como posso resolver isso ??? ou se estou fazendo isto da maneira errada e deveria ser feita de outra forma ???

Desde ja um muito obrigado !!!

Abaixo segue os arquivo da app

meu JSP - Cliente.jsp :

<body>
  <div id="fielderror"><s:fielderror /></div>      
  <s:form action="cliente!save.action" theme="simple" >
    <table border="2">
       <tr>
          <td>Id:</td>
          <td><s:textfield name="cliente.id"/></td>
       </tr>
       <tr>
          <td>Nome:</td>
          <td><s:textfield name="cliente.nome"/></td>
       </tr>
       <tr>
          <td>Cidade:</td>
          <td><s:select list="cidades" listValue="nome" listKey="id"/></td>
       </tr>
       <tr>
          <td colspan="2"><s:submit value="Salvar"/></td>
       </tr>
    </table>
  </s:form>  
</body>

Minha Action - ClienteAction.java

public class ClienteAction extends ActionSupport {	
	private static final long serialVersionUID = 1L;
	private List<Cidade> cidades;
	private Integer cidadeId;	
	private Cliente cliente;
	
	public Integer getCidadeId() {
		return cidadeId;
	}
	public void setCidadeId(Integer cidadeId) {
		this.cidadeId = cidadeId;
	}
	public List<Cidade> getCidades() {
		return cidades;
	}
	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}
	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}	
	public String add(){
		cidades = new ArrayList<Cidade>();
		cidades.add(new Cidade(1,"SAO PAULO"));
		cidades.add(new Cidade(2,"CAMPINAS"));
		return "add";
	}	
	public String save(){
		return "save";
	}

Xml de Validação - ClienteAction-validation.xml

<!DOCTYPE validators PUBLIC 
         "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
 <validators>
     <field name="cliente.id">
         <field-validator type="requiredstring">
             <message> Campo "Id" é Obrigatório </message>
         </field-validator>
     </field>
     <field name="cliente.nome">
         <field-validator type="requiredstring">
             <message> Campo "Nome" é Obrigatório </message>
         </field-validator>
     </field>
 </validators>

beans - modelo

Cidade.java

public class Cidade implements Serializable {
	private static final long serialVersionUID = 1L;
	private Integer id;
	private String nome;
                get´s e set´s
   
}

Cliente.java

public class Cliente implements Serializable {
	private static final long serialVersionUID = 1L;
	private Integer id;
	private String nome;
	private Cidade cidade;
                get´s e set´s
}

e 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>  
   <constant name="struts.devMode" value="true" />
   <package name="strutsteste" extends="struts-default">
      <action name="cliente!*" method="{1}" class="struts.action.ClienteAction">
         <result name="add">/cliente.jsp</result>
         <result name="save">/cliente.jsp</result>
         <interceptor-ref name="paramsPrepareParamsStack">
            <param name="validation.excludeMethods">add</param>
            <param name="workflow.inputResultName">add</param>
         </interceptor-ref>         
      </action>
   </package>
</struts>