Autocomplete do Primefaces tá me judiando

195 views
Skip to first unread message

Douglas

unread,
Sep 29, 2014, 10:31:18 AM9/29/14
to jav...@googlegroups.com
Bom dia! Ótima semana galera!

Bem, estou com um problema, quero usar um p:autocomplete, mas não estou conseguindo, detalhe, que se eu uso um p:selectonemenu, tudo funciona..
Estou tentando fazer assim:
<p:autoComplete
    id="raca"
    value="#{caoController.selected.raca}"
        completeMethod="#{racaController.racas}"
        converter="racaConverter"
        var="r"
        itemLabel="#{r.descricao}"
        itemValue="#{r}"
        forceSelection="true"
        required="true">
</p:autoComplete> 

Mas dá erro:
Advertência:   /cao/Cao.xhtml @35,25 completeMethod="#{racaController.racas}": Method not found: jsf.RacaC...@3f0ccac7.racas(java.lang.String)
javax.el.MethodNotFoundException: /cao/Cao.xhtml @35,25 completeMethod="#{racaController.racas}": Method not found: jsf.RacaC...@3f0ccac7.racas(java.lang.String)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:109)
...


Mas, com o selectonemenu, assim:
                <p:selectOneMenu id="raca"
                                 value="#{caoController.selected.raca}"
                                 required="true"
                                 converter="racaConverter">
                    <f:selectItems value="#{racaController.racas}"
                                   var="r"
                                   itemLabel="#{r.descricao}"
                                   itemValue="#{r}"/>
                </p:selectOneMenu>
Funciona legal!

Alguém consegue ver onde estou errando?

Obrigado

Douglas

Arthur Ferreira

unread,
Sep 29, 2014, 10:41:13 AM9/29/14
to jav...@googlegroups.com
Fala Douglas!

Teu problema é simples. O erro já está dizendo exatamente o seu problema:

Advertência:   /cao/Cao.xhtml @35,25 completeMethod="#{racaController.racas}": Method not found: jsf.RacaController@3f0ccac7.racas(java.lang.String)

Veja:

<f:selectItems value="#{racaController.racas}"

Essa é a lista que você usa para preencher a combo. Provavelmente você tem um List<String> na sua classe com as raças, certo? Isso funciona perfeitamente.

O mesmo você está passando como método no autocomplete!!! Veja:

<p:autoComplete 
    id="raca"
    value="#{caoController.selected.raca}" 
    completeMethod="#{racaController.racas}"


O atributo completeMethod do autoComplete é para ser um método que irá trazer as sugestões. Você está passando uma lista. Dessa forma, ele está chamando o método setRacas para tentar exibir as sugestões de nomes.

Veja novamente como que funciona o componente na documentação e showcase do Primefaces que você entenderá.

Abraços,


Arthur Franco Ferreira 
Analista Desenvolvedor Web Java (Sênior) e .NET (Pleno)
Licenciado em Computação pela UNILASALLE-RJ
Instrutor Caelum
http://www.linkedin.com/in/arthurferreira

--
Você recebeu essa mensagem porque está inscrito no grupo "javasf: JavaServer Faces Group" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para javasf+un...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/javasf.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/javasf/CAOoRPSXiv3JLWq9bPMJL1wm%3D5qnmecocrk4NUXiP-5TZFPdVOw%40mail.gmail.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Douglas

unread,
Sep 29, 2014, 11:59:31 AM9/29/14
to jav...@googlegroups.com
Carambola! Obrigado Arthur!

Passei horas olhando isso ontem! Desculpe a ignorância! Mas vendo a resposta, ficou fácil, não existia o método com a assinatura "racas(java.lang.String)", criei o método adequado e deu certo.
Ah.. o único detalhe, é que a lista de retorno não é List<String>, e sim de Raças, mas isso é o de menos :D

Muito obrigado, deu certinho!

Douglas


Fernando Schmitt Daufemback

unread,
Sep 29, 2014, 12:59:12 PM9/29/14
to jav...@googlegroups.com
Boa tarde, também uso autocomplete aqui, se ajudar em algo segue:

<p:autoComplete id="dd" size="50" emptyMessage="Nenhum registo encontrado" style="position:absolute; margin:5px; top:30px; right:65px;"
                            dropdown="true" value="#{mapBean.txtUc}" completeMethod="#{mapBean.complete}" scrollHeight="600">
<p:ajax event="itemSelect" listener="#{mapBean.selectUc}" update="growl" />
</p:autoComplete>




public List<String> complete(String query) {
        List<String> results = new ArrayList<String>();

//código da pesquisa......

        return results;
    }


public void selectUc() {
//quando escolhe um item...
    }



Para mais opções, acesse https://groups.google.com/d/optout.



--

Fernando Schmitt Daufemback

Phone: + 55 (48) 3648-2061
Mobile: + 55 (48) 9145-4944 / 9608-6628

Arthur Ferreira

unread,
Sep 29, 2014, 1:05:01 PM9/29/14
to jav...@googlegroups.com
Falae Fernando.

Seu método tem que ter a assinatura para o ajax:

public void selectUc(SelectEvent event) {
  // Código quando escolhe um item
}

Arthur Franco Ferreira 
Analista Desenvolvedor Web Java (Sênior) e .NET (Pleno)
Licenciado em Computação pela UNILASALLE-RJ
Instrutor Caelum
http://www.linkedin.com/in/arthurferreira

Fernando Schmitt Daufemback

unread,
Sep 29, 2014, 1:08:32 PM9/29/14
to jav...@googlegroups.com
Opa, valeu a dica Arthur! Mas assim ta funcionando também 


Para mais opções, acesse https://groups.google.com/d/optout.
B97.gif
Reply all
Reply to author
Forward
0 new messages