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>