Boa tarde galera… estou com este erro de validação em um selectOneMenu de Cidade… populo ele após a seleção de Estado…
já tentei de tudo… fiz converter… implementei equals e hasCode…
alguma dica galera? já perdi um tempão aqui…
Muito obrigado pela ajuda!
xhtml:
[code]
<h:outputLabel value=“Estado:” for=“estado” />
<p:selectOneMenu id=“estado” style=“width:300px;”>
<f:selectItem itemLabel=“Selecione…” itemValue=""/>
<f:selectItems value="#{usuarioBean.estados}" required=“true” requiredMessage=“Este campo é obrigatório”/>
<p:ajax update=“cidade” listener="#{lugarBean.changeEstado}"/>
</p:selectOneMenu>
<p:message for=“estado” display=“text”/>
<h:outputLabel value="Cidade:" for="cidade" />
<p:selectOneMenu id="cidade" style="width:300px;" value="#{lugarBean.cidade}" converter="converterCidade">
<f:selectItem itemLabel="Selecione..." itemValue=""/>
<f:selectItems value="#{lugarBean.cidades}" var="cidade" itemValue="#{cidade}" itemLabel="#{cidade.dsCidade}"/>
</p:selectOneMenu>
<p:message for="cidade" display="text"/>[/code]
MBean:
[code]public Cidade cidade;
//metodo que popula o selectOne de cidades
public void changeEstado() {
this.cidades = this.cidadeController
.populaCidadesByEstadoSelectItens(Integer
.parseInt(this.idEstado));
}[/code]
EJB:
@SuppressWarnings("unchecked")
public List<SelectItem> populaCidadesByEstadoSelectItens(Integer idEstado) {
List<SelectItem> retorno = new ArrayList<SelectItem>();
Query q = entityManager
.createQuery("SELECT cidade FROM "
+ Cidade.class.getSimpleName()
+ " cidade INNER JOIN cidade.estado estado where estado.idEstado = ?");
q.setParameter(1, idEstado);
ArrayList<Cidade> cidades = (ArrayList<Cidade>) q.getResultList();
for (Cidade cidade : cidades) {
retorno.add(new SelectItem(cidade.getIdCidade(), cidade
.getDsCidade()));
}
return retorno;
}
Converter:
[code]
import javax.ejb.EJB;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import br.com.lugarcerto.business.local.CidadeBBusinessLocal;
@FacesConverter(“converterCidade”)
public class ConverterCidade implements Converter {
@EJB
private CidadeBBusinessLocal cidadeController;
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
if (value != null && !value.equals("")) {
return this.cidadeController.findCidade(new Integer(value));
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
return value.toString();
}
}[/code]