JSF+Primefaces

Boa tarde senhores,

Estou tendo um problema com o valueChangeListener com primefaces.

Segue a minha situação:

Tenho um tela aonde faço o cadastro de empresas, tenho 1 SelectOneMenu que contém as unidades federativas (UF), também na mesma tela tenho um SelectOneMenu que popula os municipios e bairros.

Pois bem a regra é que, o SelectOneMenu correspondente aos municipios só irá conter dados baseado no UF selecionado…

Estou utilizando o valueChangeListener para chamar o método que faz esta pesquisa… porém não tenho muito conhecimento, e creio que estou fazendo algo errado…

se alguem puder me ajudar agradeço!

    <p:selectOneMenu id="uf" value="#{empresaBean.empresa.uf}" effectDuration="10" valueChangeListener="#{empresaBean.listarMunicipio}" immediate="true" rendered="true" onchange="submit()">  
       <f:selectItems value="#{empresaBean.listaUF}" />  
    </p:selectOneMenu>  
                                              
     <h:outputText value="Municipio" />  
     <p:selectOneMenu id="municipio" value="#{empresaBean.empresa.municipio}" >  
         <f:selectItems value="#{empresaBean.listaMunicipio}" />  
     </p:selectOneMenu>  

Quando dou um change no SelectOneMenu do UF não esta acionando o método no bean!

JSF Exemplos Simples com Ajax

Dá uma olhada no link acima. [=

[quote=jakefrog]JSF Exemplos Simples com Ajax

Dá uma olhada no link acima. [=[/quote]

Opa jakefrog, ja havia visto seu exemplo, acompanho os post do seu blog, porém não conseguiu resolver meu problema,
mas consegui resolver um “dos” problemas, mudei o código da minha view para:

[code]
<p:selectOneMenu id=“uf” value="#{empresaBean.empresa.uf}" immediate=“true” >
<f:selectItems value="#{empresaBean.listaUF}" />
<p:ajax update=“municipio” listener="#{empresaBean.listarMunicipio}" />
</p:selectOneMenu>

<h:outputText value=“Municipio” />
<p:selectOneMenu id=“municipio” value="#{empresaBean.empresa.municipio}" >
<f:selectItems value="#{empresaBean.listaMunicipio}" />
</p:selectOneMenu>[/code]

E está funcionando, pelo menos está chamando o método.

Mas sempre que dou 1 change ele da um erro de conversão:

[color=red]Erro de conversão ao definir o valor ‘PA’ para ‘null Converter’.[/color]

sendo que esse ‘PA’ é o itemValue de um option dentro do meu SelectOneMenu que vem dinâmicamente do banco de dados!
Não estou entendendo agora!

JSF: Converter e Bean Auto Complete.

O que você precisar é de um converter.

[quote=jakefrog]JSF: Converter e Bean Auto Complete.

O que você precisar é de um converter.[/quote]

Hum…

Estou tentando implementar o converter mas não esta dando certo :)…
Mas é assim mesmo, vou tentando até conseguir …

Obrigado!

e por sinal parabéns pelo blog, muitos tutoriais excelentes.

Opa! Valeu! :oops:

Opa consegui implementar o converter sem erro, porém no console quando faço um submit aparece:

>>> SessionFactory aberta.

//Este print abaixo é o value
VALUE: PA

//Aqui é feita uma consulta passando como parametro meu value (PA)
Hibernate: 
    select
        this_.UFD_CD_UF as UFD1_4_0_,
        this_.UFD_CD_SIT as UFD2_4_0_,
        this_.UFD_CD_USU_ATU as UFD3_4_0_,
        this_.UFD_CD_USU_INS as UFD4_4_0_,
        this_.UFD_DT_INS_REG as UFD5_4_0_,
        this_.UFD_DT_ULT_ATU as UFD6_4_0_,
        this_.UFD_NM_UF as UFD7_4_0_ 
    from
        cor_unidade_federacao this_ 
    where
        (
            1=1
        )

//Aqui Aparece novamente o value? e por sinal vazio? não entendi?
VALUE: 
Hibernate: 
    select
        this_.UFD_CD_UF as UFD1_4_0_,
        this_.UFD_CD_SIT as UFD2_4_0_,
        this_.UFD_CD_USU_ATU as UFD3_4_0_,
        this_.UFD_CD_USU_INS as UFD4_4_0_,
        this_.UFD_DT_INS_REG as UFD5_4_0_,
        this_.UFD_DT_ULT_ATU as UFD6_4_0_,
        this_.UFD_NM_UF as UFD7_4_0_ 
    from
        cor_unidade_federacao this_ 
    where
        (
            1=1
        )

//Aqui Aparece novamente o value? e por sinal vazio? não entendi?
VALUE: 
Hibernate: 
    select
        this_.UFD_CD_UF as UFD1_4_0_,
        this_.UFD_CD_SIT as UFD2_4_0_,
        this_.UFD_CD_USU_ATU as UFD3_4_0_,
        this_.UFD_CD_USU_INS as UFD4_4_0_,
        this_.UFD_DT_INS_REG as UFD5_4_0_,
        this_.UFD_DT_ULT_ATU as UFD6_4_0_,
        this_.UFD_NM_UF as UFD7_4_0_ 
    from
        cor_unidade_federacao this_ 
    where
        (
            1=1
        )


//Aqui Aparece novamente o value? agora denovo com o valor PA? não entendi?
VALUE: PA
Hibernate: 
    select
        this_.UFD_CD_UF as UFD1_4_0_,
        this_.UFD_CD_SIT as UFD2_4_0_,
        this_.UFD_CD_USU_ATU as UFD3_4_0_,
        this_.UFD_CD_USU_INS as UFD4_4_0_,
        this_.UFD_DT_INS_REG as UFD5_4_0_,
        this_.UFD_DT_ULT_ATU as UFD6_4_0_,
        this_.UFD_NM_UF as UFD7_4_0_ 
    from
        cor_unidade_federacao this_ 
    where
        (
            1=1
        )
//Aqui limpa os objetos, listas do meu managedBean
>>> Limpando os Objetos

//Este print corresponde quando entrar na condição do getAsString quando o mesmo não for nulo nem equals("")
Passou aqui

//Aqui ele passa novamente no getAsObject com o value vazio.
VALUE: 
Hibernate: 
    select
        this_.UFD_CD_UF as UFD1_4_0_,
        this_.UFD_CD_SIT as UFD2_4_0_,
        this_.UFD_CD_USU_ATU as UFD3_4_0_,
        this_.UFD_CD_USU_INS as UFD4_4_0_,
        this_.UFD_DT_INS_REG as UFD5_4_0_,
        this_.UFD_DT_ULT_ATU as UFD6_4_0_,
        this_.UFD_NM_UF as UFD7_4_0_ 
    from
        cor_unidade_federacao this_ 
    where
        (
            1=1
        )


Passou aqui
VALUE: PA
Hibernate: 
    select
        this_.UFD_CD_UF as UFD1_4_0_,
        this_.UFD_CD_SIT as UFD2_4_0_,
        this_.UFD_CD_USU_ATU as UFD3_4_0_,
        this_.UFD_CD_USU_INS as UFD4_4_0_,
        this_.UFD_DT_INS_REG as UFD5_4_0_,
        this_.UFD_DT_ULT_ATU as UFD6_4_0_,
        this_.UFD_NM_UF as UFD7_4_0_ 
    from
        cor_unidade_federacao this_ 
    where
        (
            1=1
        )
Passou aqui
>>> Limpando os Objetos
>>> Limpando os Objetos
>>> Limpando os Objetos
>>> Limpando os Objetos
>>> SessionFactory fechada.

Ok coloquei alguns comentarios aonde achei estranho, porém minha dúvida é a seguinte é normal esse ciclo ser tão repetitivo? não teria de passar apenas uma vez?
Aqui ja to totalmente perdido!

Segue minha classe Converter

[code]

@FacesConverter(value = “ufConverter”)
public class SelectConverter implements Converter {

public SelectConverter() {
	// TODO Auto-generated constructor stub
}

@Override
public Object getAsObject(FacesContext context, UIComponent component,
		String value) throws ConverterException {
	try {
		UnidadeFederacao uf = new UnidadeFederacao();
		UnidadeFederacaoRN rn = new UnidadeFederacaoRN();
		uf.setCdUf(value);
		System.out.println("VALUE: " + uf.getCdUf());
		return rn.getSingleUf(uf);
	} catch (Exception e) {
		e.printStackTrace();
		return null;
	}
}

public String getAsString(FacesContext context, UIComponent component,
		Object value) throws ConverterException {
	if (value != null || !value.equals("")) {
		System.out.println("Passou aqui");
		return value.toString();
	} else {
		System.out.println("Vazio");
		return null;
	}
}

}[/code]