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=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í