JSF2 SelectOneMenu não dispara ValueChangeListener
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/)
Curtidas 0
Respostas

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/)
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
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
onchange="submit()"
Se é que submete a página.
att Davi
GOSTEI 0

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
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
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
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/)
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
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
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/)
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
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
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/)
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
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
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
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
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/)
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