Tenho um combo que é populado dinamicamente.
seleciono o registro dele, e quando é dado o submit na página, ocorre esse erro:
...
Caused by: java.util.NoSuchElementException
at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:130)
at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:157)
at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:61)
at javax.faces.component.SelectUtils.matchValue(SelectUtils.java:82)
at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:144)
...
Não entra no método do me botão, já ocorre o erro.
O que pode ser?
Cola teu código aqui por favor, assim fica mais fácil de ajudar.
O código que popula o combo:
operadoresList = new ArrayList<SelectItem>();
operadoresList.add(new SelectItem(null, "Selecionar"));
List<UsuarioTO> usuarioTOList = UsuarioBD.getInstance().buscarOperadoresPorCNPJFilial(Long.valueOf(this.getNrCNPJ()), this.getNrFilial());
for (UsuarioTO item : usuarioTOList) {
operadoresList.add(new SelectItem(item.getCodUsuario(), item.getCodUsuario() + " - " + item.getNome()));
}
O código do combo:
<h:selectOneMenu id="operadoresSel" value="#{movimentoretaguarda_abrirMovimentoCaixaRet.idOperador}">
<f:selectItems value="#{movimentoretaguarda_abrirMovimentoCaixaRet.operadoresList}" />
</h:selectOneMenu>
Faz o teste para ver se assim funciona:
operadoresList = new ArrayList<SelectItem>();
operadoresList.add(new SelectItem(null, "Selecionar"));
List<UsuarioTO> usuarioTOList = UsuarioBD.getInstance().
buscarOperadoresPorCNPJFilial(Long.valueOf(this.getNrCNPJ()), this.getNrFilial());
for (UsuarioTO item : usuarioTOList) {
operadoresList.add(new SelectItem(item,
item.getCodUsuario() + " - " + item.getNome()));
}
Olá Anderson,
mesmo com o código que você passou, continuou ocorrendo o mesmo erro.
Faz as modificações ai:
Teu método:
operadoresList = new ArrayList<SelectItem>();
List<UsuarioTO> usuarioTOList = UsuarioBD.getInstance().
buscarOperadoresPorCNPJFilial(Long.valueOf(this.getNrCNPJ()), this.getNrFilial());
for (UsuarioTO item : usuarioTOList) {
operadoresList.add(new SelectItem(item,
item.getCodUsuario() + " - " + item.getNome()));
}
Tua página:
<h:selectOneMenu id="operadoresSel" value="#{movimentoretaguarda_abrirMovimentoCaixaRet.idOperador}">
<f:selectItem itemLabel="Selecione" itemValue="Selecione" />
<f:selectItems value="#{movimentoretaguarda_abrirMovimentoCaixaRet.operadoresList}" />
</h:selectOneMenu>
Anderson,
Obrigada pela ajuda. Mesmo com a modificação que você sugeriu, o erro continuou.
Utilizei a tag do tomahawk abaixo e funcionou. Obrigada!
<t:saveState id="saveState1"
value="#{movimentoretaguarda_abrirMovimentoCaixaRet.operadoresList}" />
try { operadoresList = new ArrayList();
operadoresList.add(new SelectItem(null, “Selecionar”));
List usuarioTOList = UsuarioBD.getInstance().buscarOperadoresPorCNPJFilial(Long.valueOf(this.getNrCNPJ()), this.getNrFilial());
for (UsuarioTO item : usuarioTOList) {
operadoresList.add(new SelectItem(item.getCodUsuario(), item.getCodUsuario() + " - " + item.getNome()));
}
} catch (NoSuchElementException e) {
System.out.println (“Colocar aqui a escessão que você precisa!!!”)
}
//Só fiz o tratamento para esta excessão que esta aparecendo quando você tenta rodar o codigo, ela é unchecked e nao precisa ser tratada, pois ela deriva da classe RuntimeException.