Erro NullPointerException ao usar valueChangeListener no JSF 2

2 respostas
F

Bom dia a todos,

tenho uma aplicação com jsf e hibernate, e ela funciona normalmente, porém

tenho no minha aplicação um combobox de estado e ao ser selecionado o estado deveria ser exibir as cidades, até ai tudo bem, as cidades são exibidas corretamente

estou tentando usar o valueChangeListener na minha aplicação(para mudar o combobox) mas ta dando um erro que eu nao estou entendendo, esta dando erro de NullPointerException ao mandar gravar no banco

alguém tem ideia do pq do erro de NullPointerException

eu estou usando o seguinte codigo para fazer isso

<h:selectOneMenu immediate="true" valueChangeListener="#{theSelectBean.mudaListaId}" onchange="submit()" id="pesEstado" value="#{theSelectBean.nomeestado}">
                    <f:selectItems value="#{gravaEstado.estados}" var="u" itemLabel="#{u.est_nom}" itemValue="#{u.est_nom}" />
                </h:selectOneMenu>

                </td>
                <td>

                <h:selectOneMenu id="cidId" required="true" value="#{gravaPessoas.cid_id}"  >
                    <f:selectItems value="#{theSelectBean.cidades}" var="u" itemLabel="#{u.cid_nom}" itemValue="#{u.cid_id}" />
                </h:selectOneMenu>

bean q manipula o valueChangeListener

public void mudaLista(ValueChangeEvent event) {

        String idString = event.getNewValue().toString();
        System.out.println("String: " + event.getNewValue().toString());

        Session sessao = CriadorDeSessaoNovo.getSession();

        Criteria listagem_query = sessao.createCriteria(Cidade.class).
                createAlias("estado", "es").
                addOrder(Order.asc("es.est_nom")).
                add(Restrictions.eq("es.est_nom", event.getNewValue().toString()).
                ignoreCase());
        setCidades(listagem_query.list());


        sessao.close();

        //FacesContext.getCurrentInstance().renderResponse();
        FacesContext context = FacesContext.getCurrentInstance();
        context.getApplication().getNavigationHandler().handleNavigation(
    context, null, "sec_Pessoas_backup");
    }

aki esta o metodo do managedBean q faz a gravação no banco

public void gravar() {
        try {
            Estado obj_estado = new Estado();
            obj_estado.setEst_id(est_id);

            Cidade obj_cidade = new Cidade();
            obj_cidade.setCid_id(cid_id);
            
            Pessoas obj_pes = new Pessoas();

            if (getPes_id() != 0) {
                obj_pes.setPes_id(pes_id);
            }

            obj_pes.setPes_bairro(AlteraLetras.retornaFrase(pes_bairro));

            obj_pes.setPes_complemento((pes_complemento));

            obj_pes.setPes_data_nascimento(pes_data_nascimento);

            obj_pes.setPes_email_pessoal(pes_email_pessoal);

            obj_pes.setPes_logradouro(AlteraLetras.retornaFrase(pes_logradouro));

            obj_pes.setPes_prenome(AlteraLetras.retornaFrase(pes_prenome));

            obj_pes.setPes_nome_meio(AlteraLetras.retornaFrase(pes_nome_meio));

            obj_pes.setPes_sobrenome(AlteraLetras.retornaFrase(pes_sobrenome));

            obj_pes.setPes_nom_completo((pes_prenome + " " + pes_nome_meio + " " + pes_sobrenome));

            obj_pes.setPes_nome_italiano(AlteraLetras.retornaFrase(pes_nome_italiano));
            
            obj_pes.setPes_nome_traduzido(AlteraLetras.retornaFrase(pes_nome_traduzido));

            if (!getPes_nome_pais_origem().equals("")) {
                obj_pes.setPes_nome_pais_origem(AlteraLetras.retornaFrase(pes_nome_pais_origem));
            }

            if (getPes_numero() != 0) {
                obj_pes.setPes_numero(pes_numero);
            }
            
            obj_pes.setPes_rg_num(pes_rg_num);

            obj_pes.setPes_rg_expedidor((pes_rg_expedidor));

            obj_pes.setPes_rg_dat(pes_rg_dat);

            if (getPes_cpf() != 0) {
                obj_pes.setPes_cpf(pes_cpf);
            }
            if (getPes_cep() != 0) {
                obj_pes.setPes_cep(pes_cep);
            }
            if (getPes_telefone1() != 0) {
                obj_pes.setPes_telefone1(pes_telefone1);
            }
            if (getPes_telefone2() != 0) {
                obj_pes.setPes_telefone2(pes_telefone2);
            }
            if (getPes_telefone3() != 0) {
                obj_pes.setPes_telefone3(pes_telefone3);
            }

            
            obj_pes.setEstado(obj_estado);
            
            obj_pes.setCidade(obj_cidade);
            

            sessao.saveOrUpdate(obj_pes);
            tx.commit();
            sessao.close();
            limpante();            
            FacesContext.getCurrentInstance().addMessage("FormPessoas:gravar", new FacesMessage("Informações gravadas com sucesso!"));

        } catch (Exception erro) {
            System.out.println("Erro na insersão : " + erro);
            erro.printStackTrace();
            
            tx.rollback();
            sessao.close();
            FacesContext.getCurrentInstance().addMessage("FormPessoas:gravar", new FacesMessage("Falha ao gravar informações!"));

        }

2 Respostas

marcosharbs

Está chamando o método abaixo?

public void mudaLista(ValueChangeEvent event){...}

O seu value change listener está assim

valueChangeListener="#{theSelectBean.mudaListaId}"

mas o nome do seu método no managedbean é mudaLista e não mudaListaId,
alterar o nome do método para chamar corretamente

F

tem razão, estava usando o metodo errado, é que eu tenho dois metodos com nome parecido

public void mudaLista(ValueChangeEvent event) 

 public void mudaListaId(ValueChangeEvent event)

Os metodos estavam iguais com exceção da parte final deles

final do metodo mudaLista

FacesContext context = FacesContext.getCurrentInstance(); context.getApplication().getNavigationHandler().handleNavigation( context, null, "sec_Pessoas_backup");
final do metodo mudaListaId

FacesContext.getCurrentInstance().renderResponse();

O erro que aparecia de NullPointerException aparece quando estava usando o FacesContext.getCurrentInstance().renderResponse(); e quando uso o getNavigationHandler a lista nem é carregada pq parece q ele reinicia a pagina…

To apanhando feio aki… t+

Criado 23 de agosto de 2011
Ultima resposta 23 de ago. de 2011
Respostas 2
Participantes 2