Pessoal, sou iniciante aqui no fórum do GUJ e em desenvolvimento web + jsf também. Preciso montar um autocomplete em um textfield do woodstock com Netbeans. O componente me fornece uma maneira bastante simples de implementação do autocomplete, bastando que eu marque o flag de autocomplete e informe qual o método - getOptionscIDGrupo - no backbean retornará uma lista de option[].
arquivo Jsp: frmGrupoUsuario.jsp
<webuijsf:textField autoComplete="true" autoCompleteExpression="#{frmGrupoUsuario.getOptionscIDGrupo}" autoValidate="true"
binding="#{frmGrupoUsuario.txtcIDGrupo}" columns="48" id="txtcIDGrupo" label="Grupo" required="true"
style="left: 27px; top: 27px; position: absolute; width: 280px" text="#{frmGrupoUsuario.jgrupousuario.cIDGrupo.apresentacao}"/>
método bean de carga da lista: frmGrupoUsuario.java
-> onde, JNegocio é uma baseclass e getApresentacao o método de apresentação dos meus objetos;
-> filter é a variável trazida do text do textfield cIDGrupo;
public Option[] getOptionscIDGrupo(String filter){
List listaBuscaEdit = JAdm.getList("JGrupo", "noGrupo like '%"+filter+"%'" , "noGrupo");
optionBuscaEdit = new Option[listaBuscaEdit.size()];
for (int i = 0; i < listaBuscaEdit.size(); i++) {
JNegocio obj = (JNegocio) listaBuscaEdit.get(i);
optionBuscaEdit[i] = new Option(obj.getObjID(), obj.getApresentacao());
}
return optionBuscaEdit;
}
Até ai tudo bem, a lista é carregada e exibida no listbox que é carregado automaticamente (ou seja, não existe um componente listbox no meu formulário, ele é criado automaticamente após retornar os options[]) e os objetos são exibidos conforme desejado. Porém, ao selecionar um item da lista (listbox) ele preenche o text do textfield com o valor da chave do objeto ([b]obj.getObjdID()[/b]) e não o nome da apresentação ([b]obj.getApresentacao[/b]) que foi exibido para seleção na lista. Ao mesmo tempo não sei como e quando capturar o componente listbox que exibiu a lista para setar na mão o textfield.text como o label do option selecionado.
A documentação do woodstock diz que após a validação (autovalidate) o text seria setado automaticamente, mas essa validação é realizada no servidor, o que penso ser desnecessário pois acabei de selecionar um item que veio do DB. Caso defina o primeiro parâmetro do objeto option como o método obj.getApresentacao ele funciona mas não terei como atribuir a chave do objeto da lista, que é uma chave estrangeira nessa tabela grupousuario e não sei como acessar o listbox que lista os itens.
Talvez meu problema seja trivial, mas não estou conseguindo finalizar. De qualquer forma preciso implementar isso com o componente do woodstock pois é o padrão utilizado. Na verdade preciso que funcione como um componente de vinculação de objetos e um textfield com autocomplete resolveria meu problema.
Desde já agradeço a ajuda de vocês.