JSF2 SelectOneMenu não dispara ValueChangeListener

Java

03/08/2011


 


Caros colegas, Gostaria de saber se alguém já passou pelo mesmo problema e conseguiu fazer funcionar? Trata-se de uma combinação simples de 2 selects. Busquei incansavelmente algum exemplo, mas não consegui encontrar.
O atributo 'valueChangeListener' do componente h:selectOneMenu, não chega nem a chamar o método ufChangeListener(ValueChangeEvent e) no bean. Deve haver algum problema no javascript do framework.
pagina.xhtml
    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        

    

    

            

        

        



        

    

        

    

          

        

        

      

     

        <h:form id="form-cidades-uf">        <h:selectOneMenu id="sob-ufs"                     value="#{cidadeUFComboBean.selecUF}"                     onchange="submit()"                     immediate="true"		     valueChangeListener="#{cidadeUFComboBean.ufChangeListener}">        <f:selectItem itemLabel="-- Selecione a uf -- " itemValue="Nenhuma"/>            <f:selectItems value="#{cidadeUFComboBean.ufs}" var="u" itemValue="#" itemLabel="#{u.sigla}"/>        <f:ajax event="change" render="sob-cidades @form"/>
            </h:selectOneMenu>            <h:selectOneMenu id="sob-cidades"                     value="#{cidadeUFComboBean.selecCidade}" >        <f:selectItem itemLabel="-- Selecione a cidade -- " itemValue="Nenhuma"/>          <f:selectItems value="#{cidadeUFComboBean.cidades}" var="c" itemValue="#" itemLabel="#{c.nome}"/>        <f:ajax />    </h:selectOneMenu>           </h:form>

    

    

            

        

        



        

    

        

    

          

        

        

      

     

    

O Bean:
    // Cidade selecionada    private EnderecoCidade selecCidade;
    public EnderecoCidade getSelecCidade() {        return selecCidade;    }    public void setSelecCidade(EnderecoCidade selecCidade) {        this.selecCidade = selecCidade;    }        // Cidades do estado selecionado    private List<EnderecoCidade> cidades;        public List<EnderecoCidade> getCidades() {        lookup.getCidDao().list(selecUF);        return cidades;    }        // UF selecionada    private EnderecoUF selecUF;        public EnderecoUF getSelecUF() {        return selecUF;    }    public void setSelecUF(EnderecoUF selecUF) {        this.selecUF = selecUF;    }        // UFs    private List<EnderecoUF> ufs;        public List<EnderecoUF> getUfs() {        if(ufs==null){            ufs = lookup.getUfDao().list();        }        return ufs;    }        public void ufChangeListener(ValueChangeEvent e){        selecUF = (EnderecoUF) e.getNewValue();        cidades = getCidades();                System.out.println("ufChangeListener: uf="+selecUF.getSigla()+", listou "+cidades.size()+" cidades...");    }

Desde já agradeço,
Um grande abraço,
César (http://www.codesample.co/)

César (http://www.codesample.co/)

Curtidas 0

Respostas

Robson Teixeira

Robson Teixeira

03/08/2011

Olá cesar   experimente mudar a tag  de <f:ajax event="change" render="sob-cidades @form"/>   para <f:ajax event="change" render="sob-cidades " execute="@this"/>   teste ai ok??   espero ter ajudado att  robson
GOSTEI 0
César (http://www.codesample.co/)

César (http://www.codesample.co/)

03/08/2011


 


Robson, obrigado pelo apoio, entretanto continua igual. O estranho é que o listener não é nem chamado.
O ValueChangeListener deveria ao menos disparar um evento.
Um grande abraço!
GOSTEI 0
Davi Costa

Davi Costa

03/08/2011

Acho que a tag não precisa submeter a página, supondo que queira fazer uma requisição ajax, então tira esse :
onchange="submit()"
Se é que submete a página.

att Davi


GOSTEI 0
César (http://www.codesample.co/)

César (http://www.codesample.co/)

03/08/2011


 


Obrigado Davi.
Já tentei com e sem, sem sucesso, coloquei mais para ilustrar, pois muitos tópicos que encontrei na internet, recomendam a função javascript. 
Acredito que seja um bug, no javascript do componente SelectOneMenu, pois o listener não é nem chamado.
Um grande abraço!
GOSTEI 0
Davi Costa

Davi Costa

03/08/2011

Está usando jsf puro? e qual versão, seria interessante se vc já não está usando usar alguma implementação que vai te dar uma gama de componentes prontos... como richfaces, prime-faces e poraí vai..
se já usa algum que tal pesquisar como a biblioteca de componentes faz a utilização de requisições ajax e não usar a padrão do jsf.

att Davi
GOSTEI 0
Robson Teixeira

Robson Teixeira

03/08/2011

sete no seu selectedOneMenu os seguintes atributos  o required e o immediate como true e teste


GOSTEI 0
César (http://www.codesample.co/)

César (http://www.codesample.co/)

03/08/2011



Descupem a demora por responder, estava em um cliente.

Obrigado Robson, setei ambos como true mas continua sem funcionar.

Davi, estou usando a implementação de referencia Mojarra 2.1.1. com Primefaces 2.2.1 (para outras funcionalidades) no servidor Glassfish 3.1.

Acabei de baixar um exemplo de Select Ajaxify do site do Primefaces, rodei e funcionou, agora vou adapta-lo a meu projeto. Acho que a saída vai ser esta.

Só achei estranho o 'valueChangeListener' não disparar o evento. Se alguém por acaso tiver um exemplo de selects aninhados com 'valueChangeListener' em JSF2/Facelets por favor envie.

Um grande abraço e meu muito obrigado a todos.
GOSTEI 0
Davi Costa

Davi Costa

03/08/2011

Show de bola Cesar.
Assim que possível fechar o chamado. Eu até tenho exmplos do valueChangeListener funcionando, mas também um pouco amarrada a minha biblioteca no caso Trinindad.

att Davi
GOSTEI 0
César (http://www.codesample.co/)

César (http://www.codesample.co/)

03/08/2011




Davi, Aproveitando...

Sobre o MyFaces, para vc foi uma determinação do projeto ou opção sua?

É estável para trabalhar com JSF2 e Facelets? Vc recomendaria?

Mais uma vez agradeço, []s
GOSTEI 0
Davi Costa

Davi Costa

03/08/2011

Foi opção minha. JSF2 já vem com facelets como padrão, então eu recomendaria sim.
E eu desaconselho usar jsf sem facelets, a performance cai bastante caso vc tenha um reaproveitamento de telas, como menus ou rodapés.

att Davi
GOSTEI 0
César (http://www.codesample.co/)

César (http://www.codesample.co/)

03/08/2011



No caso, minha pergunta foi se o MyFaces está estavel para trabalhar com JSF e Facelets. E se vc recomendaria o My
Faces?

De qualquer forma, obrigado.

Um grande abraço,


GOSTEI 0
Davi Costa

Davi Costa

03/08/2011

Sim sim recomendaria sim.
Agora para o JSF2 é que não tenho muita certeza, mas arriscaria sim.
Dá um google para ver essa questão. De repente vc até posta aqui para toda comunidade saber

abcs

Att Davi
GOSTEI 0
Davi Costa

Davi Costa

03/08/2011

Só para complementar:
http://stackoverflow.com/questions/4530746/mojarra-or-myfaces-jsf2-0-starter
http://www.justlogged.com/Question/1/4530746/723adc217f84c3855bfe4ed9f0e8edac

att Davi
GOSTEI 0
César (http://www.codesample.co/)

César (http://www.codesample.co/)

03/08/2011



Valeu Davi!

Coloquei aqui o código do combo funcionando com Primefaces e JSF2, para que quiser:
http://www.codesample.co/2011/08/combo-cidade-uf-com-primefaces-e-jsf-2/

Um grande braço.
GOSTEI 0
POSTAR