Estou com problema tenho select onemenu que chama outro select. Ate ai tudo bem, mas qdo mando salvar ele da erro Validation Error: Value is not valid.
Segue o bean e a tela abaixo:
public List getSelectSistema() {
selectSistema.clear();
LinkedHashSet hash = new LinkedHashSet();
nomeSistema = “”;
try {
if (sistema != null) {
nomeSistema = sistema.getNomeSistema();
}
List dados = new SistemaDao().listarSistema();
for (Sistema sis : dados) {
String sistema = sis.getNomeSistema();
hash.add(sistema);
}
for (String sis : hash) {
SelectItem s = new SelectItem();
s.setValue(sis);
s.setLabel(sis);
this.selectSistema.add(s);
}
//popularResponsavel();
} catch (Exception e) {
e.printStackTrace();
}
return selectSistema;
}
public void popularResponsavel() {
selectSistemaResponsavel.clear();
try {
if (nomeSistema != "" && nomeSistema != null) {
List<Sistema> dados = new SistemaDao()
.listarResponsavelPorSistema(nomeSistema);
for (Sistema sis : dados) {
SelectItem s = new SelectItem();
s.setValue(sis.getIdSistema());
s.setLabel(sis.getResponsavel());
selectSistemaResponsavel.add(s);
}
} else {
nomeSistema = selectSistema.get(0).getLabel();
List<Sistema> dados = new SistemaDao()
.listarResponsavelPorSistema(nomeSistema);
for (Sistema sis : dados) {
SelectItem s = new SelectItem();
s.setValue(sis.getIdSistema());
s.setLabel(sis.getResponsavel());
selectSistemaResponsavel.add(s);
}
}
ordenar(selectSistemaResponsavel);
} catch (Exception e) {
e.printStackTrace();
}
}
public List<SelectItem> getSelectSistemaResponsavel() {
if (selectSistemaResponsavel.isEmpty()) {
popularResponsavel();
}
return selectSistemaResponsavel;
}
Bom, eu não uso desta forma (converter), itero minha lista e transformo em uma lista de selecteditens, essa lista que mando pra view, e a view manda somente o id.
public List<SelectItem> listaCidadeItens(String uf) {
List<SelectItem> itens = new ArrayList<SelectItem>();
if (uf != null) {
UfsDAO ufDao = new UfsDAO(cidadesDAO.getEntityManager());
for (Cidade cid : cidadesDAO.findByUF(ufDao.findBySigla(uf)))
itens.add(new SelectItem(cid, cid.getDescricao()));
ufDao = null;
}
return itens;
}
— Console do JBoss —
21:35:39,658 ERROR [STDERR] Nov 15, 2012 9:35:39 PM com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=prestadorForm:j_id111:j_id343:cidade[severity=(ERROR 2), summary=(valor não é válido), detail=(valor não é válido)]
O que descobri foi que se eu deixar o selectOneMenu fixo a estrutura funciona corretamente, se o selectOneMenu fica dependendo do estado, ele gera o erro.
Verifique se seu entity manager está com nome de entityManager, e não outro… pelo que vi aqui se tiver outro nome, você tem que especificar no components.xml. (foi oque entendi).
Mudei o meu de “em” pra “entityManager” e deu certo aqui… =D
(tem que usar o <s:convertEntity/> la na view, e <s:selectItems>, não <f:selectItems>.