Woodstock + ajax + autocomplete

2 respostas
A

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.

2 Respostas

B

Aramim:
Isto não resolve seu problema:
http://www.netbeans.org/kb/docs/web/ajax-textfield_pt_BR.html

A

Infelizmente não, pois o listbox não existe no meu form, apenas o textfield. Tenho alguns forms com vários componentes para funcionarem assim e outros mais. Se tiver que criar um listbox para cada componente desses não ficaria muito legal. O textfield após ativar o autocomplete e vincular o metodo getOptions já carrega a lista e exibe essa lista em runtime, pois não existe um listbox no form como dito acima. Tem um exemplo legal no link abaixo, mas também prevê um listbox no form.

Exemplo:
http://blogs.sun.com/dmitry/entry/creating_autocomplete_entry_field_with

De qualquer forma o material sempre ajuda em algo mais.
Obrigado !

Criado 19 de março de 2009
Ultima resposta 19 de mar. de 2009
Respostas 2
Participantes 2