SelectOneMenu is not loaded when selecting object for editing

12

I have a SelectOneMenu (Primefaces) component of cities, which loads according to the selected state.

My component has the following behavior, right after saving the object and then selecting it in DataTable through commandLink for editing, the component loads with the city normally, but if I leave the page and return to after editing, this component is not loaded.

I have already done the degug and the value of the city comes filled, but I do not know why it is not presented in the component. If anyone can help me, I've tried everything.

Class Address with mappings

@Entity
@Table(name="TENDERECO", schema="SGCADM")
public class Endereco implements Serializable{
private Cidade cidade;
    private Estado estado;
    private Pessoa pessoa;

@JoinColumn(name = "CODCID", referencedColumnName = "CODCID")
        @ForeignKey(name = "fk_endereco_cidade")    
        public Cidade getCidade() {
            if (cidade == null) {
                cidade = new Cidade();
            }
            return cidade;
        }

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

        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "CODESTA", referencedColumnName = "CODESTA")
        @ForeignKey(name = "fk_endereco_estado")    
        public Estado getEstado() {
            if (estado == null) {
                estado = new Estado();
            }
            return estado;
        }
        public void setEstado(Estado estado) {
            this.estado = estado;
        }   

        @OneToOne(targetEntity = Pessoa.class, fetch=FetchType.LAZY)    
        @JoinColumn(name = "CODPES", referencedColumnName = "CODPES")
        @ForeignKey(name = "fk_endereco_pessoa")
        public Pessoa getPessoa() {
            return pessoa;
        }
        public void setPessoa(Pessoa pessoa) {
            this.pessoa = pessoa;
        }

Bean with scopo @viewScoped

@ManagedBean(name="funcionarioBean")
@ViewScoped
public class FuncionarioBean implements Serializable{

    @EJB private FuncionarioBO funcionarioBO;

    @EJB private CidadeBO cidadeBO;

    @EJB private EstadoBO estadoBO;     

    @PostConstruct
    public void init(){
        this.listCargo = cargoBO.buscarCargos();
        this.listEstado = estadoBO.buscarEstados(); 
        this.listGerentesSupervisores = funcionarioBO.listaGerentesSupervisores();
        listarFuncionarios();
    }

    public void populaCidades(AjaxBehaviorEvent event) throws TransactionalException {
        listCidadePorEstado = cidadeBO.buscarCidadesPorEstado(getFuncionario().getEndereco().getEstado().getCodigoEstado());
    }

    public void salvar() throws PersistenceException, ParseException {
        try {
            funcionario.setDataCadastro(dataAtual);
            funcionario.setTipoPessoa(TipoPessoaEnum.FISICA);
            funcionario.setDataNascimento(formata.parse(DateUtils.formataData(funcionario.getDataNascimento())));
            funcionario.getEndereco().setDataCadastro(dataAtual);
            funcionario.getEndereco().setPessoa(funcionario);
            funcionarioBO.salvarFuncionario(funcionario);
            FacesUtil.info("Funcionário foi salvo com sucesso ! ");
            listarFuncionarios();
            limpar();
        } catch (TransactionalException e) {
            e.printStackTrace();
            logger.error("Não foi possível salvar Funcionario ! " + e.getMessage());
            FacesUtil.error(FacesMessage.SEVERITY_ERROR, "Não foi possível salvar funcionário ! ", e.getMessage());
        }
    }

    public void editar(){
        funcionario = funcionarioBO.find(funcionario.getCodigoFuncionario());
        disable = false;
        btnNew = true;
        btnSave = false;
        btnCancel = false;
    }


}

Method implementation buscaCidadePorEstado

public List<Cidade> buscarCidadesPorEstado(Long codigoEstado) throws TransactionalException{
         Criteria cri = getSession().createCriteria(Cidade.class)
                 .add(Restrictions.eq("estado.codigoEstado", codigoEstado));         
        return cri.list();

    }

selectOneMenu State and City along with commandLink you are looking for the selected object from my dataTable:

<p:selectOneMenu id="Selest" value="#{funcionarioBean.funcionario.endereco.estado.codigoEstado}" required="true" requiredMessage="O campo ESTADO é obrigatório !" style="width:175px; margin-left: 5px; font-weight:bold;" disabled="#{funcionarioBean.disable}">
  <f:selectItem itemLabel="" itemValue="" />
  <f:selectItems value="#{funcionarioBean.listEstado}" var="item" itemLabel="#{item.descricao}" itemValue="#{item.codigoEstado}" />
  <f:ajax event="change" render="Selcid" listener="#{funcionarioBean.populaCidades}" />
</p:selectOneMenu>

<p:selectOneMenu id="Selcid" value="#{funcionarioBean.funcionario.endereco.cidade.codigoCidade}" style="width:175px; margin-left: 5px;font-weight:bold;" required="true" requiredMessage="O campo CIDADE é obrigatório !" disabled="#{funcionarioBean.disable}">
  <f:selectItem itemLabel="" itemValue="" />
  <f:selectItems value="#{funcionarioBean.listCidadePorEstado}" var="cid" itemLabel="#{cid.descricao}" itemValue="#{cid.codigoCidade}" />
</p:selectOneMenu>



<p:column id="edit" width="9%" style="text-align:center">
  <p:commandLink action="#{funcionarioBean.editar}" ajax="false" update=":form:view">
    <p:graphicImage value="/resources/img/icon/Edit16x16.png" />
    <f:setPropertyActionListener value="#{obj}" target="#{funcionarioBean.funcionario}" />
  </p:commandLink>
</p:column>
    
asked by anonymous 26.05.2015 / 01:55

0 answers