JSF+Primefaces

6 respostas
I

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!

6 Respostas

Hebert_Coelho

JSF Exemplos Simples com Ajax

Dá uma olhada no link acima. [=

I
jakefrog:
JSF Exemplos Simples com Ajax

Dá uma olhada no link acima. [=

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:

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

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!

Hebert_Coelho

JSF: Converter e Bean Auto Complete.

O que você precisar é de um converter.

I

jakefrog:
JSF: Converter e Bean Auto Complete.

O que você precisar é de um converter.

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.

Hebert_Coelho

Opa! Valeu! :oops:

I
jakefrog:
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

@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;
		}
	}

}
Criado 27 de agosto de 2012
Ultima resposta 29 de ago. de 2012
Respostas 6
Participantes 2