Rich:comboBox selecionar String no combo e pegar o id do bean

4 respostas
RobsonFagundes

Boa Noite Colegas

Estou tentando fazer o seguinte:

Gostaria de Selecionar o Item no rich:comboBox e pegar o atributo Id do tipo Long no bean correpontende a este Item
tentei fazer da seguinte maneira…

populo o combo e tento passar o id atraves do actionparm:

<rich:comboBox value="#{paginaHandler.categoria.nome}" 
                       selectFirstOnUpdate="false"
                       defaultLabel="Selecione a Categoria"
                       width="180"
                       id="ComboCategoria" > 
            
            <f:selectItems value="#{paginaHandler.categoriasCombo}" />
            
            <a4j:commandLink actionListener="#{paginaHandler.escolheIdCategoria}" >
                
                <f:attribute name="idcat" value="#{paginaHandler.categoria.idcat}"/>
                <a4j:actionparam id="idCategoria" value="#{paginaHandler.idCategoria}" />
                
            </a4j:commandLink> 
            
        </rich:comboBox>

no MB PaginaHandler

Categoria categoria = new Categoria();
  private Long idCategoria;

  public Long getIdCategoria() {
        return idCategoria;
    }

    public void setIdCategoria(Long idCategoria) {
        this.idCategoria = idCategoria;
    }

    public List<SelectItem> getCategoriasCombo() {
        System.out.println("Listando Paginas do BD... Para ComboBox ");
        List<SelectItem> listaCategorias = new ArrayList<SelectItem>();

        for (Categoria ObjCat : getListCategoria()) {
            listaCategorias.add(new SelectItem(new String(ObjCat.getNome())));
            System.out.println(ObjCat.getNome());
        }
        return listaCategorias;
    }


    public void escolheIdCategoria(ActionEvent event) throws Exception {
        UIComponent link = event.getComponent();
        UIParameter param = (UIParameter) link.findComponent("idCategoria");
        Long id = Long.parseLong((String) param.getValue());
        setIdCategoria(id);
        categoria.setIdcat(idCategoria);
    }

porem o objeto categoria sempre fica null…
Alguem tem alguma sugestao???

4 Respostas

yorgan

Mas por que você não utiliza o value do combo para isso?
Algo como:

<rich:comboBox value="#{paginaHandler.idCategoria" 
                       selectFirstOnUpdate="false"
                       defaultLabel="Selecione a Categoria"
                       width="180"
                       id="ComboCategoria" > 
            
            <f:selectItems value="#{paginaHandler.categoriasCombo}" />        
        </rich:comboBox>

E monte cada item da lista assim:

//dentro do for:
listaCategorias.add(new SelectItem(ObjCat.getId(), new String(ObjCat.getNome())));

Assim quando você submenter o formulário o campo idCategoria estará com o valor selecionado.

[]'s

Daniel

RobsonFagundes

intaum Daniel fiz assim

<rich:comboBox value="#{paginaHandler.categoria.nome}" 
                     selectFirstOnUpdate="false"
                     defaultLabel="Selecione a Categoria"
                     width="180"
                     id="ComboCategoria" > 
   
                    <f:selectItems value="#{paginaHandler.categoriasCombo}" />

e la no SelectItem

public List<SelectItem> getCategoriasCombo() {
        System.out.println("Listando Paginas do BD... Para ComboBox ");
        List<SelectItem> listaCategorias = new ArrayList<SelectItem>();

        for (Categoria ObjCat : getListCategoria()) {
            listaCategorias.add(new SelectItem(ObjCat.getIdcat(), new String(ObjCat.getNome())));
            setIdCategoria(ObjCat.getIdcat());
            categoria.setIdcat(idCategoria);
            System.out.println(ObjCat.getIdcat() + " - " + ObjCat.getNome());
        }
        return listaCategorias;
    }

blz gravou certinho… porem la no combo mesmo q eu coloque

<rich:comboBox value="#{paginaHandler.categoria.nome}"

ele aparece so o ID nao aparece o nome…
mais nem skenta eu me viro aki…

oooo mais Valeu Daniel me ajudou muito
Abraçao

rildolessa

Olá Robson, estou com esse seu problema também:
Queria que meu combobox listasse o nome e enviasse o id:

Ex: a lista é essa:

public List getListaPessoas() {

List<SelectItem> result = new ArrayList<SelectItem>();

	List<Pessoas> pessoas = service.retrieveAll();

	Collections.sort(pessoas , new Comparator<TipoContrato>() {

		public int compare(Pessoas c1, Pessoas c2) {

			return c1.getNome().compareTo(c2.getNome());

		}
	});
	
	for (Pessoas pessoa : pessoas ) {

		result.add(new SelectItem(pessoa.getId(), pessoa.getId()));
	}

	return result;
}

o componete é esse:

<rich:comboBox value="#{pessoaBean.id}" selectFirstOnUpdate=“false” defaultLabel=“Enter some value”>
<f:selectItems value="#{pessoaBean.listaPessoas}"/>
</rich:comboBox>

OBS: se eu usar o componente para selectOneMenu dá certo, só que a lista de pessoas é muito grande e seria recomendado o auto complet

<h:selectOneMenu value="#{pessoaBean.id}" selectFirstOnUpdate=“false” defaultLabel=“Enter some value”>
<f:selectItems value="#{pessoaBean.listaPessoas}"/>
</h:selectOneMenu >

P

cara moh merda, to começando a achar que é bug do componente, nao consigo por nada tbm

Criado 22 de maio de 2009
Ultima resposta 31 de jan. de 2011
Respostas 4
Participantes 4