PrimeFaces/JSF/JPA - selectOneMenu não persiste dado no banco

7 respostas
N

Possuo um campo select que não está salvando a opção selecionada, no banco de dados.
Após o cadastro completo, o usuário recebe as informações na tela para confirmar os dados, e lá aparece o estado conforme a seleção do usuário corretamente, porém na hora de persistir no banco não vai.
O valor fica como null.
Segue o código:

<p:selectOneMenu effect="fade" id="estado" value="#{controllerPessoa.pessoa.estado}" style="width: 120px">
                                                    <f:selectItem itemLabel="Selecione..." noSelectionOption="true" />  
                                                    <f:selectItem itemLabel="SC" itemValue="SC" />
                                                    <f:selectItem itemLabel="AC" itemValue="AC" />
                                                    <f:selectItem itemLabel="AL" itemValue="AL" />
                                                    <f:selectItem itemLabel="AP" itemValue="AP" />
                                                    <f:selectItem itemLabel="AM" itemValue="AM" />
                                                    <f:selectItem itemLabel="BA" itemValue="BA" />
                                                    <f:selectItem itemLabel="CE" itemValue="CE" />
                                                    <f:selectItem itemLabel="DF" itemValue="DF" />
                                                    <f:selectItem itemLabel="ES" itemValue="ES" />
                                                    <f:selectItem itemLabel="GO" itemValue="GO" />
                                                    <f:selectItem itemLabel="MA" itemValue="MA" />
                                                    <f:selectItem itemLabel="MT" itemValue="MT" />
                                                    <f:selectItem itemLabel="MS" itemValue="MS" />
                                                    <f:selectItem itemLabel="MG" itemValue="MG" />
                                                    <f:selectItem itemLabel="PA" itemValue="PA" />
                                                    <f:selectItem itemLabel="PB" itemValue="PB" />
                                                    <f:selectItem itemLabel="PR" itemValue="PR" />
                                                    <f:selectItem itemLabel="PE" itemValue="PE" />
                                                    <f:selectItem itemLabel="PI" itemValue="PI" />
                                                    <f:selectItem itemLabel="RJ" itemValue="RJ" />
                                                    <f:selectItem itemLabel="RN" itemValue="RN" />
                                                    <f:selectItem itemLabel="RS" itemValue="RS" />
                                                    <f:selectItem itemLabel="RO" itemValue="RO" />
                                                    <f:selectItem itemLabel="RR" itemValue="RR" />
                                                    <f:selectItem itemLabel="SP" itemValue="SP" />
                                                    <f:selectItem itemLabel="SE" itemValue="SE" />
                                                    <f:selectItem itemLabel="TO" itemValue="TO" />
                                                   </p:selectOneMenu>

Transformei esse campo em um inputText e funcionou normalmente, o que eu preciso fazer para funcionar no modo select ??

No mesmo formulário tenho outros campos de endereço usando e todos eles funcionam normalmente.
Acredito que o erro está ocorrendo no selectOneMenu.

Obrigado!

7 Respostas

M

Se MB esta como @SessionScoped?

B

o problema pode estar na linha 30

</h:selectOneMenu>

ou ela esta ai por engano!?
:slight_smile:

N

Sim! O estranho é que se for inputText funciona!

@ManagedBean
@SessionScoped
public class ControllerPessoa {

build_successful:
o problema pode estar na linha 30

</h:selectOneMenu>

ou ela esta ai por engano!?
:)

Está ali por engano, foi erro de digitação na hora de fazer o post, obrigado por avisar.

B

nick0llas, posta o codigo do seu ControllerPessoa
e do bean Pessoa.

flws

N

build_successful:
nick0llas, posta o codigo do seu ControllerPessoa
e do bean Pessoa.

flws

Segue!

package Controller;

import Dao.PessoaDao;
import Dao.PessoaDaoImp;
import Model.Pessoa;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import org.primefaces.event.FlowEvent;

@ManagedBean
@SessionScoped
public class PessoaController {

    private Pessoa pessoa;
    private Pessoa novaPessoa = new Pessoa();
    private DataModel listarPessoas;
    private boolean skip;

    public PessoaController() {
    }

    public Pessoa getNovaPessoa() {
        return novaPessoa;
    }

    public void setNovaPessoa(Pessoa novaPessoa) {
        this.novaPessoa = novaPessoa;
    }

    public Pessoa cadastraNovo() {
        try {
            PessoaDao dao = new PessoaDaoImp();
            dao.persist(novaPessoa);
            novaPessoa = new Pessoa();
            return novaPessoa;
        } catch (Exception e) {
             e.printStackTrace();
            return novaPessoa;
        }
    }

    public void atualizaLista() {
        PessoaDao dao = new PessoaDaoImp();
        List<Pessoa> pessoaes = dao.list();
        listarPessoas = new ListDataModel(pessoaes);
    }

    public DataModel getListarPessoas() {
        PessoaDao dao = new PessoaDaoImp();
        List<Pessoa> pessoaes = dao.list();
        listarPessoas = new ListDataModel(pessoaes);
        return listarPessoas;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public void prepararAdicionarPessoa(ActionEvent actionEvent) {
        pessoa = new Pessoa();
    }

    public void prepararAlterarPessoa(ActionEvent actionEvent) {
        pessoa = (Pessoa) (listarPessoas.getRowData());
    }

    public void excluirPessoa(ActionEvent actionEvent) {
        Pessoa pessoaTemp = (Pessoa) (listarPessoas.getRowData());
        PessoaDao dao = new PessoaDaoImp();
        dao.remove(pessoaTemp);
    }

    public void adicionarPessoa(ActionEvent actionEvent) {
        try {
            PessoaDao dao = new PessoaDaoImp();
            dao.save(pessoa);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void alterarPessoa() {
        PessoaDao dao = new PessoaDaoImp();
        dao.update(pessoa);
    }

    public String onFlowProcess(FlowEvent event) {
        if (skip) {
            skip = false;	//reset in case user goes back
            return "confirm";
        } else {
            return event.getNewStep();
        }
    }
    
    public boolean isSkip() {
        return skip;
    }

    public void setSkip(boolean skip) {
        this.skip = skip;
    }
    
}

BEAN PESSOA:

package Model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;

@Entity
public class Pessoa implements Serializable {

    @Id
    @GeneratedValue
    private long idpessoa;
    private String nome, sexo, estadoCivil;
    private String segmento, telefone, celular, email;
    private String cep, bairro, cidade, rua, estado, complemento;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date nascimento;

    public Date getNascimento() {

        return nascimento;
    }

    public void setNascimento(Date nascimento) {
        this.nascimento = nascimento;
    }

    public Pessoa() {
    }

    public Pessoa(long idpessoa, String nome, String sexo, String estadoCivil, String segmento, String telefone, String celular, String email, String cep, String bairro, String cidade, String rua, String estado, String complemento, Date nascimento) {
        this.idpessoa = idpessoa;
        this.nome = nome;
        this.sexo = sexo;
        this.estadoCivil = estadoCivil;
        this.segmento = segmento;
        this.telefone = telefone;
        this.celular = celular;
        this.email = email;
        this.cep = cep;
        this.bairro = bairro;
        this.cidade = cidade;
        this.rua = rua;
        this.estado = estado;
        this.complemento = complemento;
        this.nascimento = nascimento;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getCep() {
        return cep;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public long getIdpessoa() {
        return idpessoa;
    }

    public void setIdpessoa(long idpessoa) {
        this.idpessoa = idpessoa;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getSegmento() {
        return segmento;
    }

    public void setSegmento(String segmento) {
        this.segmento = segmento;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
}

Valeu, o que mais precisar eu posto.
:smiley:

B

nick0llas… da um new no pessoa tambem,
igual vc fez no novaPessoa …

private Pessoa pessoa = new Pessoa();  
    private Pessoa novaPessoa = new Pessoa();

testa ai, pode ser isso!
:slight_smile:

M

Olá amigo, como o build_successful disse… provavelmente é a instancia da Pessoa que esta faltando, se você notar vc chama “controllerPessoa.pessoa.estado” isso deveria resultar em um “nullpointerexception”. Da uma checada que deve resolver.

Criado 10 de janeiro de 2012
Ultima resposta 11 de jan. de 2012
Respostas 7
Participantes 3