[RESOLVIDO]Recuperar id objeto selecionado rich:autocomplete

Boa tarde pessoal,

Como faço para recuperar o id do objeto selecionado sem que o id apareça para o usuário, ou seja, o usuário vai ver o nome, mas o MB receberá o id do objeto. Estou utilizando o componente rich:autocomplete do richfaces.

Segue o código fonte para ficar mais claro a minha dúvida.

xhtml

<rich:autocomplete autocompleteMethod="#{condominioMB.buscarListaCondominoVO}"
            var="condominoVO" minChars="3" layout="table"  fetchValue="#{condominoVO.nomeCondomino}" 
            value="#{condominioMB.condominoVO.nomeCondomino}" >					
		<rich:column>
			#{condominoVO.nomeBloco}
		</rich:column>
		<rich:column>
		         #{condominoVO.numeroUnidade}
		</rich:column>
		<rich:column>
		     #{condominoVO.nomeCondomino}
		</rich:column>
</rich:autocomplete>

Oi Pessoal,

Encontrei a solução. :smiley:

Segue a fonte:

http://stackoverflow.com/questions/6759742/jsf-richfaces-autocomplete-problem-send-hidden-parameter-using-anything

[quote=maikel.souza]Boa tarde pessoal,

Como faço para recuperar o id do objeto selecionado sem que o id apareça para o usuário, ou seja, o usuário vai ver o nome, mas o MB receberá o id do objeto. Estou utilizando o componente rich:autocomplete do richfaces.

Segue o código fonte para ficar mais claro a minha dúvida.

xhtml

<rich:autocomplete autocompleteMethod="#{condominioMB.buscarListaCondominoVO}" var="condominoVO" minChars="3" layout="table" fetchValue="#{condominoVO.nomeCondomino}" value="#{condominioMB.condominoVO.nomeCondomino}" > <rich:column> #{condominoVO.nomeBloco} </rich:column> <rich:column> #{condominoVO.numeroUnidade} </rich:column> <rich:column> #{condominoVO.nomeCondomino} </rich:column> </rich:autocomplete> [/quote]

Amigo, você podeira me ajudar, por favor, explicando a função dos componentes usados no rich:autoComplete? Como por exemplo: fetchValue e value?

[quote=diegofm300][quote=maikel.souza]Boa tarde pessoal,

Como faço para recuperar o id do objeto selecionado sem que o id apareça para o usuário, ou seja, o usuário vai ver o nome, mas o MB receberá o id do objeto. Estou utilizando o componente rich:autocomplete do richfaces.

Segue o código fonte para ficar mais claro a minha dúvida.

xhtml

<rich:autocomplete autocompleteMethod="#{condominioMB.buscarListaCondominoVO}" var="condominoVO" minChars="3" layout="table" fetchValue="#{condominoVO.nomeCondomino}" value="#{condominioMB.condominoVO.nomeCondomino}" > <rich:column> #{condominoVO.nomeBloco} </rich:column> <rich:column> #{condominoVO.numeroUnidade} </rich:column> <rich:column> #{condominoVO.nomeCondomino} </rich:column> </rich:autocomplete> [/quote]

Amigo, você podeira me ajudar, por favor, explicando a função dos componentes usados no rich:autoComplete? Como por exemplo: fetchValue e value?[/quote]

Olá diegofm300,

No fetchValue vai o parâmetro que será utilizado no MB.
Veja o código abaixo:

public List<CondominoVO> buscarListaCondominoVO(Object nomeCondomino){		
		return  this.condominoService.buscarListaCondominosVOPorNomeCondominoECondominio(nomeCondomino.toString(), this.condominio);		
	}	

O Object será o condominioMB.condominoVO.nomeCondomino Poderiar ser o id do VO também.

O value, é o que será exibido para o usuário. Entendeu?

Abraços

[quote=maikel.souza][quote=diegofm300][quote=maikel.souza]Boa tarde pessoal,

Como faço para recuperar o id do objeto selecionado sem que o id apareça para o usuário, ou seja, o usuário vai ver o nome, mas o MB receberá o id do objeto. Estou utilizando o componente rich:autocomplete do richfaces.

Segue o código fonte para ficar mais claro a minha dúvida.

xhtml

<rich:autocomplete autocompleteMethod="#{condominioMB.buscarListaCondominoVO}" var="condominoVO" minChars="3" layout="table" fetchValue="#{condominoVO.nomeCondomino}" value="#{condominioMB.condominoVO.nomeCondomino}" > <rich:column> #{condominoVO.nomeBloco} </rich:column> <rich:column> #{condominoVO.numeroUnidade} </rich:column> <rich:column> #{condominoVO.nomeCondomino} </rich:column> </rich:autocomplete> [/quote]

Amigo, você podeira me ajudar, por favor, explicando a função dos componentes usados no rich:autoComplete? Como por exemplo: fetchValue e value?[/quote]

Olá diegofm300,

No fetchValue vai o parâmetro que será utilizado no MB.
Veja o código abaixo:

public List<CondominoVO> buscarListaCondominoVO(Object nomeCondomino){		
		return  this.condominoService.buscarListaCondominosVOPorNomeCondominoECondominio(nomeCondomino.toString(), this.condominio);		
	}	

O Object será o condominioMB.condominoVO.nomeCondomino Poderiar ser o id do VO também.

O value, é o que será exibido para o usuário. Entendeu?

Abraços[/quote]

maikel.souza, desde já agradeço pela ajuda.
Entendi suas explicações mas não consegui fazer funcionar. Há necessidade de usar um inputText extra para que o autoComplete funcione, como era feito em versões anteriores do RichFaces?

Oi diegofm300,

Desculpa a demora na resposta, mas vamos lá (vou colocar o código que fiz e deu certo)

No meu caso, eu digito o nome, quero que apareça o nome, mas será o id do objeto que vou utilizar para saber qual escolhi.

.xhtml


<h:panelGroup>
// Rotulo
     <h:outputLabel value="#{msg['condominio.sindicoGeral']}:" for="buscarNomeSindicoGeral" />
     <span class="asterisco">*</span>
// Função que será chamada para popular o id, que está sendo armazenado em um campo tipo hidden
     <a4j:jsFunction name="buscarIdSindicoGeral" execute="buscarNomeSindicoGeral" action="#{condominioMB.popularIdSindicoGeral}" render="idSindicoGeralHidden       buscarNomeSindicoGeral"/>
</h:panelGroup>
<h:panelGroup>					
// Componente autocomplete - NAO utilizo inputText, o autocomplete jah tem
    <rich:autocomplete  id="buscarNomeSindicoGeral" autocompleteMethod="#{condominioMB.buscarListaCondominoVO}" var="condominoVO" minChars="3"      onselectitem="buscarIdSindicoGeral()"
							 layout="table"  fetchValue="#{condominoVO.id}"  value="#{condominioMB.nomeSindicoGeral}" required="true" label="#{msg['condominio.sindicoGeral.label']}">
							<rich:column>
								#{condominoVO.nomeBloco}
							</rich:column>
							<rich:column>
				        		#{condominoVO.numeroUnidade}
				        	</rich:column>
				        	<rich:column>
				        		#{condominoVO.nomeCondomino}
				        	</rich:column>
						</rich:autocomplete>
// Componente hidden que armazenará o id do objseto
						<h:inputHidden id="idSindicoGeralHidden" value="#{condominioMB.idSindicoGeral}"/>
					</h:panelGroup>
						

MB


/**
	 * Método que encontra e id o síndico geral selecionado.	
	 */
	public void popularIdSindicoGeral() {
		  this.idSindicoGeral = Integer.parseInt(this.nomeSindicoGeral);
		  Boolean encontrou = Boolean.FALSE;
		  Integer i = 0;
		  while(!encontrou){		  
			CondominoVO condominoVO = this.listaDeCondominosVOs.get(i++);
			if (condominoVO.getId().equals(this.idSindicoGeral)){
				this.nomeSindicoGeral = condominoVO .getNomeCondomino();
				encontrou = Boolean.TRUE;
			}
		}	
	}


public List<CondominoVO> buscarListaCondominoVO(Object nomeCondomino){		
		return  this.condominoService.buscarListaCondominosVOPorNomeCondominoECondominio(nomeCondomino.toString(), this.condominio);		
	}	

Outros pontos:

  • Estou utilizando a versão 4.1.0.20110910-M2 do richfaces (devo atualizar), veja se a sua versão não tem algum problema.
  • No meu segundo post (se não estou enganado), coloquei a fonte de onde tirei a solução. Veja lá também
  • Tive alguma dificuldade em usar esse componente pela primeira vez. Penso que é normal. Faz alguns testes, que deve rolar sim.

Abraços e boa sorte aí