Olá pessoal, estou com o seguinte problema: Tenho dois combos um estado e outro cidade que ao selecionar o estado (que tb tem um converter e está funcionando sem problemas), o outro deve ser carregado com a lista de cidades, o que está acontecendo. Só que ao selecionar uma cidade, é lançado um erro de validação ( required=true), dizendo que uma cidade deve ser selecionada, ora mais eu acabei de selecionar. O que será que está acontecendo?
//[b]Minha entidade Cidade[/b]
public class Cidades implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID_CIDADES", nullable = false)
private Integer idCidades = 0;
@Basic(optional = false)
@Column(name = "DSC_CIDADE", nullable = false, length = 100)
private String dscCidade = "";
@OneToMany(cascade = CascadeType.ALL, mappedBy = "cidades", fetch = FetchType.LAZY)
private List<ClientesPessoaJuridica> clientesPessoaJuridicaList = new ArrayList<ClientesPessoaJuridica>();
@JoinColumn(name = "ID_ESTADOS", referencedColumnName = "ID_ESTADOS", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Estados estados = new Estados();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "cidades", fetch = FetchType.LAZY)
private List<ClientesPessoaFisica> clientesPessoaFisicaList = new ArrayList<ClientesPessoaFisica>();
//getters e setters omitidos
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((dscCidade == null) ? 0 : dscCidade.hashCode());
result = prime * result
+ ((idCidades == null) ? 0 : idCidades.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Cidades)) {
return false;
}
Cidades other = (Cidades) obj;
if (dscCidade == null) {
if (other.dscCidade != null) {
return false;
}
} else if (!dscCidade.equals(other.dscCidade)) {
return false;
}
if (idCidades == null) {
if (other.idCidades != null) {
return false;
}
} else if (!idCidades.equals(other.idCidades)) {
return false;
}
return true;
}
@Override
public String toString() {
return getDscCidade();
}
}
//[b]Meu combo cidade[/b]
<rich:comboBox enableManualInput="false" id="txt_cidade_pj"
value="#{MBusuarios.usuarios.cpj.cidades}" required="true"
requiredMessage="#{msg.required}" defaultLabel="Escolha a cidade"
selectFirstOnUpdate="true" inputClass="input_text"
converter="converter.cidadeConverter">
<f:selectItems value="#{MBusuarios.cidadesPJSelectItens}" />
<a4j:support event="onchange"
reRender="txt_cidade_pj,msg_cidade_pj1,msg_cidade_pj2"
limitToList="true" />
</rich:comboBox>
// [b]Meu converter[/b]
package converters;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import managedBean.MBusuarios;
import dao.CidadesDao;
import entities.Cidades;
import escopo.ApplicationBean1;
public class cidadeConverter implements Converter {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
@Override
public Object getAsObject(FacesContext context, UIComponent arg1, String arg2) {
try {
if (arg2.trim().equals("") || arg2 == null)
return new Cidades();
else {
CidadesDao dao = new CidadesDao();
cidades = dao.findByDscCidade(arg2);
return cidades;
}
} catch (Exception ex) {
return new Cidades();
}
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
// TODO Auto-generated method stub
if (arg2 instanceof Cidades) {
Cidades c = (Cidades) arg2;
return c.getDscCidade();
} else
return "";
}
}