Como faço pra preencher um h:selectOneMenu a partir de itens recuperados do BD utilizando um bean?
Creio que isso ajuda:
<f:selectItems value="#{teuBean.recupera}"/>
Valew!
Olá, pessoal !
Aproveitando a duvida do colega, gostaria de ver se alguém pode me ajudar…no seguinte…já estou com o selectItems pegando os valores do banco porém ao mostrar no menu os valores estão vindo duplicados. No banco tenho um total de 3 registros, e quando mando executar aparece no menu 6 registros.
Alguém saberia me dizer o que pode ser ? Já executei o código, no console e a lista de SelectItem, está sendo preenchida com somente 3 itens mesmo.
Agradeço a ajuda de todos…!
<rich:panel>
<a4j:form ajaxSubmit="true" reRender="form_simples">
<h:selectOneMenu value="#{categoria.objCategoria}">
<f:selectItems value="#{categoria.listaCategoria}"/>
</h:selectOneMenu>
</a4j:form>
</rich:panel>
public class CategoriaBean {
private CtrlCategoria ctrlCategoria;
private String nome;
private Categoria objCategoria;
private List<SelectItem> listaCategoria;
/** Cria uma nova instancia de CategoriaBean */
public CategoriaBean() {
this.setCtrlCategoria(new CtrlCategoria());
this.listaCategoria = new ArrayList<SelectItem>();
}
public CtrlCategoria getCtrlCategoria() {
return ctrlCategoria;
}
public void setCtrlCategoria(CtrlCategoria ctrlCategoria) {
this.ctrlCategoria = ctrlCategoria;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String add(){
String objString = null;
try {
if(this.ctrlCategoria.insere(this.getNome())){
objString = new String("ok");
} else {
objString = new String("erro");
}
} catch (Exception e) {
objString = new String("erro");
StatusBean.setStatus(e.getMessage());
}
return objString;
}
public List<SelectItem> getListaCategoria(){
List<Categoria> lista = null;
try {
lista = this.ctrlCategoria.listar();
for(Categoria c: lista){
this.listaCategoria.add(new SelectItem(c, c.getNome()));
}
} catch (Exception ex) {
StatusBean.setStatus(ex.getMessage());
}
return this.listaCategoria;
}
public Categoria getObjCategoria() {
return objCategoria;
}
public void setObjCategoria(Categoria objCategoria) {
this.objCategoria = objCategoria;
}
public void setListaCategoria(List<SelectItem> listaCategoria) {
this.listaCategoria = listaCategoria;
}
}
Também estou com o problema dos dados serem exibidos duplicados no selectOneMenu.
Fiz um teste, colocando um data table na página e o resultado exibido é mais estranho ainda, onde 3 vezes cada registro do meu BD é exibido.
Acho que pode ser algum problema com o hibernate, na hora de retornar…
alguma sugestão?