Construtor de ManagedProperty sendo executado duas vezes

Eu sei que o construtor do ManagedProperty comboBean esta sendo executado duas vezes, alguem sabe me dizer o pq?

Cliente ManagedBean:

[code]@ManagedBean(name = “alterarClienteBean”)
@ViewScoped
public class AlterarClienteBean implements Serializable {
private long pes_id;
private String codigo;
private String razao;
private String cnpj;
private String ie;
private String loja;
private String nome;
private String email;
private String endereco;
private String bairro;
private String cep;
@ManagedProperty(value = “#{comboBean}”)
private ComboBean comboBean;
private boolean formularioCliente;
private List telefones = new ArrayList();
private String telefone;
private String tipoTelefone;
private Vendedor vendedor;

public AlterarClienteBean() {
    try{
        pes_id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
    }catch(Exception e){
        pes_id = 0;
    }
    if (pes_id == 0) {
        System.out.println("Erro: id vazio!");
    } else {
        ClienteDao clienteDao = new ClienteDao();
        Cliente cliente = clienteDao.getClienteById(pes_id);
        HttpSession hs = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        VendedorLogin vendedorLogin = (VendedorLogin) hs.getAttribute("currentUser");

        VendedorDao vendedorDao = new VendedorDao();
        vendedor = vendedorDao.getVendedorByCod(vendedorLogin.getCodigo());

        if (cliente.getVen_id().getPes_id() != vendedor.getPes_id()) {
            System.out.println("Cliente não é desse vendedor! ID_C: " + cliente.getVen_id().getPes_id() + " ID_V: " + vendedor.getPes_id());
        } else {
            codigo = String.valueOf(cliente.getCli_codigo());
            razao = cliente.getCli_razao();
            cnpj = cliente.getCli_cnpj();
            ie = cliente.getCli_ie();
            loja = String.valueOf(cliente.getCli_loja());
            nome = cliente.getPes_nome();
            email = cliente.getPes_email();
            endereco = cliente.getPes_endereco();
            bairro = cliente.getPes_bairro();
            cep = cliente.getPes_cep();
            if(comboBean == null){ 
                comboBean = new ComboBean();
                comboBean.setEstado(cliente.getCid_id().getEst_id());
                comboBean.setCidade(cliente.getCid_id());
            }
            telefone = "";
            tipoTelefone = "1";
            telefones = new ArrayList();
            TelefoneDao telefoneDao = new TelefoneDao();
            List<Telefone> telefones_temp;
            telefones_temp = telefoneDao.getTelefoneByPesId(cliente);
            for (Telefone t : telefones_temp) {
                TelefoneFormulario tel_form = new TelefoneFormulario();
                tel_form.setTel_numero(t.getTel_numero());
                tel_form.setTel_tipo(String.valueOf(t.getTel_tipo()));
                telefones.add(tel_form);
            }
        }
    }
    formularioCliente = true;
}


public String adicionarTelefone() {
    if (!telefone.equals("")) {
        for (TelefoneFormulario t : telefones) {
            if (t.getTel_numero().equals(telefone) && t.getTel_tipo().equals(tipoTelefone)) {
                telefone = "";
                tipoTelefone = "1";
                return null;
            }
        }
        TelefoneFormulario tempTel = new TelefoneFormulario();
        tempTel.setTel_numero(telefone);
        tempTel.setTel_tipo(tipoTelefone);
        telefones.add(tempTel);
        telefone = "";
        tipoTelefone = "1";
    }
    return null;
}

public String removerTelefone() {
    for (TelefoneFormulario t : telefones) {
        if (t.getTel_numero().equals(telefone) && t.getTel_tipo().equals(tipoTelefone)) {
            telefones.remove(t);
            break;
        }
    }
    telefone = "";
    tipoTelefone = "1";
    return null;
}

public String validarForm() {
    boolean erro = false;
    if (codigo.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:codigoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (razao.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:razaoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (cnpj.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:cnpjMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    } else {
        CNPJValidator validator = new CNPJValidator();
        try {
            validator.assertValid(cnpj);
        } catch (InvalidStateException e) {
            //for (ValidationMessage message : e.getInvalidMessages()) {
            FacesContext.getCurrentInstance().addMessage("alterarCliente:cnpjMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "CNPJ invalido"));
            erro = true;
            //}
        }
    }
    if (ie.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:ieMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (Integer.parseInt(loja) < 1) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:lojaMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Dado inválido"));
        erro = true;
    }
    if (nome.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:nomeMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (email.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:emailMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (endereco.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:enderecoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (bairro.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:bairroMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (cep.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:cepMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (getComboBean().getEstado() == null) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:estadoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (getComboBean().getCidade() == null) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:cidadeMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }

    if (erro == false) {
        ClienteDao clienteDao = new ClienteDao();
        Cliente cliente = clienteDao.getClienteById(pes_id);
        cliente.setCid_id(getComboBean().getCidade());
        cliente.setCli_cnpj(cnpj);
        cliente.setCli_codigo(Long.parseLong(codigo));
        cliente.setCli_ie(ie);
        cliente.setCli_loja(Integer.parseInt(loja));
        cliente.setCli_razao(razao);
        cliente.setPes_bairro(bairro);
        cliente.setPes_cep(cep);
        cliente.setPes_email(email);
        cliente.setPes_endereco(endereco);
        cliente.setPes_nome(nome);

        List<Telefone> lista_telefones = new ArrayList();
        for (TelefoneFormulario t : telefones) {
            if (!t.getTel_numero().equals("") && !t.getTel_tipo().equals("")) {
                Telefone tel = new Telefone();
                tel.setPes_id(cliente);
                tel.setTel_numero(t.getTel_numero());
                tel.setTel_tipo(Integer.parseInt(t.getTel_tipo()));
                lista_telefones.add(tel);
            }
        }

        clienteDao.atualizar(cliente);
        formularioCliente = false;

        /*try {
         TelefoneDao telefoneDao = new TelefoneDao();
         for (TelefoneFormulario t : telefones) {
         if (!t.getTel_numero().equals("") && !t.getTel_tipo().equals("")) {
         Telefone tel = new Telefone();
         tel.setPes_id(cliente);
         tel.setTel_numero(t.getTel_numero());
         tel.setTel_tipo(Integer.parseInt(t.getTel_tipo()));
         //telefoneDao.incluir(tel);
         }
         }
         formularioCliente = false;
         } catch (ConstraintViolationException e) {
         FacesContext.getCurrentInstance().addMessage("alterarCliente:codigoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Código já existente para outro cliente"));
         // falta consertar para mostrar só o campo do EXCEPTION
         }*/
    }
    return null;
}

}[/code]
Ocultei os getters e setters do code…

ManagedProperty:

[code]@ManagedBean(name = “comboBean”)
@ViewScoped
public class ComboBean implements Serializable {
private final EstadoDao estDao = new EstadoDao();
private final CidadeDao cidDao = new CidadeDao();
private List estados;
private List cidades;
private Cidade cidade;
private Estado estado;

public ComboBean(){
    if (cidade == null) {
        cidade = new Cidade();
    }
    if (estado == null) {
        estado = new Estado();
    }
    estados = estDao.listarTodos();
}

public void listaCidades(AjaxBehaviorEvent event) {
    cidades = cidDao.listarTodos(estado);
}

public Cidade getCidade() {
    return cidade;
}

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

public List<Cidade> getCidades() {
    return cidades;
}

public void setCidades(List<Cidade> cidades) {
    this.cidades = cidades;
}

public Estado getEstado() {
    System.out.println("Getting: "+estado.getEst_nome());
    return estado;
}

public void setEstado(Estado estado) {
    this.estado = estado;
    cidades = cidDao.listarTodos(estado);
    System.out.println("Setando: "+estado.getEst_nome());
}

public List<Estado> getEstados() {
    return estados;
}

public void setEstados(List<Estado> estados) {
    this.estados = estados;
}

}[/code]

xhtml:

[code]
<p:column>


<p:selectOneMenu id=“estado” value="#{comboBean.estado}" converter=“converterEstado” >
<f:selectItem itemLabel=“Selecione” />
<f:selectItems value="#{comboBean.estados}" var=“e” itemValue="#{e}" itemLabel="#{e.est_nome}" />
<f:ajax render=“cidade” event=“change” listener="#{comboBean.listaCidades}" />
</p:selectOneMenu>


<p:message id=“estadoMessage” for=“estadoMessage” />

</p:column>
</p:row>
                        <p:row>
                            <p:column styleClass="formu">
                                <h:outputLabel for="cidade" value="Cidade" />
                            </p:column>
                            <p:column>
                                <div class="formuinput">
                                    <p:selectOneMenu id="cidade" value="#{comboBean.cidade}" converter="converterCidade" >
                                        <f:selectItem itemLabel="Selecione" />
                                        <f:selectItems value="#{comboBean.cidades}" var="c" itemValue="#{c}" itemLabel="#{c.cid_nome}" />
                                    </p:selectOneMenu>
                                </div>
                                <div class="formuerror">
                                    <p:message id="cidadeMessage" for="cidadeMessage" />  
                                </div> 
                            </p:column>[/code]

Os outros campos do formulario está tudo ok, exibe a informação correta, agora o comboBean está executando o construtor duas vezes, na primeira vez ele passo o objeto Estado corretamente, ai ele executa o construtor novamente, e fica tudo como null…
Alguem consegue enxergar a minha cagadinha? hahuhuahua

Obrigado desde já!

[quote=faelzindc]Eu sei que o construtor do ManagedProperty comboBean esta sendo executado duas vezes, alguem sabe me dizer o pq?

Cliente ManagedBean:

[code]@ManagedBean(name = “alterarClienteBean”)
@ViewScoped
public class AlterarClienteBean implements Serializable {
private long pes_id;
private String codigo;
private String razao;
private String cnpj;
private String ie;
private String loja;
private String nome;
private String email;
private String endereco;
private String bairro;
private String cep;
@ManagedProperty(value = “#{comboBean}”)
private ComboBean comboBean;
private boolean formularioCliente;
private List telefones = new ArrayList();
private String telefone;
private String tipoTelefone;
private Vendedor vendedor;

public AlterarClienteBean() {
    try{
        pes_id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
    }catch(Exception e){
        pes_id = 0;
    }
    if (pes_id == 0) {
        System.out.println("Erro: id vazio!");
    } else {
        ClienteDao clienteDao = new ClienteDao();
        Cliente cliente = clienteDao.getClienteById(pes_id);
        HttpSession hs = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        VendedorLogin vendedorLogin = (VendedorLogin) hs.getAttribute("currentUser");

        VendedorDao vendedorDao = new VendedorDao();
        vendedor = vendedorDao.getVendedorByCod(vendedorLogin.getCodigo());

        if (cliente.getVen_id().getPes_id() != vendedor.getPes_id()) {
            System.out.println("Cliente não é desse vendedor! ID_C: " + cliente.getVen_id().getPes_id() + " ID_V: " + vendedor.getPes_id());
        } else {
            codigo = String.valueOf(cliente.getCli_codigo());
            razao = cliente.getCli_razao();
            cnpj = cliente.getCli_cnpj();
            ie = cliente.getCli_ie();
            loja = String.valueOf(cliente.getCli_loja());
            nome = cliente.getPes_nome();
            email = cliente.getPes_email();
            endereco = cliente.getPes_endereco();
            bairro = cliente.getPes_bairro();
            cep = cliente.getPes_cep();
            if(comboBean == null){ 
                comboBean = new ComboBean();
                comboBean.setEstado(cliente.getCid_id().getEst_id());
                comboBean.setCidade(cliente.getCid_id());
            }
            telefone = "";
            tipoTelefone = "1";
            telefones = new ArrayList();
            TelefoneDao telefoneDao = new TelefoneDao();
            List<Telefone> telefones_temp;
            telefones_temp = telefoneDao.getTelefoneByPesId(cliente);
            for (Telefone t : telefones_temp) {
                TelefoneFormulario tel_form = new TelefoneFormulario();
                tel_form.setTel_numero(t.getTel_numero());
                tel_form.setTel_tipo(String.valueOf(t.getTel_tipo()));
                telefones.add(tel_form);
            }
        }
    }
    formularioCliente = true;
}


public String adicionarTelefone() {
    if (!telefone.equals("")) {
        for (TelefoneFormulario t : telefones) {
            if (t.getTel_numero().equals(telefone) && t.getTel_tipo().equals(tipoTelefone)) {
                telefone = "";
                tipoTelefone = "1";
                return null;
            }
        }
        TelefoneFormulario tempTel = new TelefoneFormulario();
        tempTel.setTel_numero(telefone);
        tempTel.setTel_tipo(tipoTelefone);
        telefones.add(tempTel);
        telefone = "";
        tipoTelefone = "1";
    }
    return null;
}

public String removerTelefone() {
    for (TelefoneFormulario t : telefones) {
        if (t.getTel_numero().equals(telefone) && t.getTel_tipo().equals(tipoTelefone)) {
            telefones.remove(t);
            break;
        }
    }
    telefone = "";
    tipoTelefone = "1";
    return null;
}

public String validarForm() {
    boolean erro = false;
    if (codigo.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:codigoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (razao.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:razaoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (cnpj.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:cnpjMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    } else {
        CNPJValidator validator = new CNPJValidator();
        try {
            validator.assertValid(cnpj);
        } catch (InvalidStateException e) {
            //for (ValidationMessage message : e.getInvalidMessages()) {
            FacesContext.getCurrentInstance().addMessage("alterarCliente:cnpjMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "CNPJ invalido"));
            erro = true;
            //}
        }
    }
    if (ie.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:ieMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (Integer.parseInt(loja) < 1) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:lojaMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Dado inválido"));
        erro = true;
    }
    if (nome.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:nomeMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (email.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:emailMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (endereco.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:enderecoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (bairro.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:bairroMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (cep.equals("")) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:cepMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (getComboBean().getEstado() == null) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:estadoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }
    if (getComboBean().getCidade() == null) {
        FacesContext.getCurrentInstance().addMessage("alterarCliente:cidadeMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Campo obrigatório"));
        erro = true;
    }

    if (erro == false) {
        ClienteDao clienteDao = new ClienteDao();
        Cliente cliente = clienteDao.getClienteById(pes_id);
        cliente.setCid_id(getComboBean().getCidade());
        cliente.setCli_cnpj(cnpj);
        cliente.setCli_codigo(Long.parseLong(codigo));
        cliente.setCli_ie(ie);
        cliente.setCli_loja(Integer.parseInt(loja));
        cliente.setCli_razao(razao);
        cliente.setPes_bairro(bairro);
        cliente.setPes_cep(cep);
        cliente.setPes_email(email);
        cliente.setPes_endereco(endereco);
        cliente.setPes_nome(nome);

        List<Telefone> lista_telefones = new ArrayList();
        for (TelefoneFormulario t : telefones) {
            if (!t.getTel_numero().equals("") && !t.getTel_tipo().equals("")) {
                Telefone tel = new Telefone();
                tel.setPes_id(cliente);
                tel.setTel_numero(t.getTel_numero());
                tel.setTel_tipo(Integer.parseInt(t.getTel_tipo()));
                lista_telefones.add(tel);
            }
        }

        clienteDao.atualizar(cliente);
        formularioCliente = false;

        /*try {
         TelefoneDao telefoneDao = new TelefoneDao();
         for (TelefoneFormulario t : telefones) {
         if (!t.getTel_numero().equals("") && !t.getTel_tipo().equals("")) {
         Telefone tel = new Telefone();
         tel.setPes_id(cliente);
         tel.setTel_numero(t.getTel_numero());
         tel.setTel_tipo(Integer.parseInt(t.getTel_tipo()));
         //telefoneDao.incluir(tel);
         }
         }
         formularioCliente = false;
         } catch (ConstraintViolationException e) {
         FacesContext.getCurrentInstance().addMessage("alterarCliente:codigoMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Código já existente para outro cliente"));
         // falta consertar para mostrar só o campo do EXCEPTION
         }*/
    }
    return null;
}

}[/code]
Ocultei os getters e setters do code…

ManagedProperty:

[code]@ManagedBean(name = “comboBean”)
@ViewScoped
public class ComboBean implements Serializable {
private final EstadoDao estDao = new EstadoDao();
private final CidadeDao cidDao = new CidadeDao();
private List estados;
private List cidades;
private Cidade cidade;
private Estado estado;

public ComboBean(){
    if (cidade == null) {
        cidade = new Cidade();
    }
    if (estado == null) {
        estado = new Estado();
    }
    estados = estDao.listarTodos();
}

public void listaCidades(AjaxBehaviorEvent event) {
    cidades = cidDao.listarTodos(estado);
}

public Cidade getCidade() {
    return cidade;
}

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

public List<Cidade> getCidades() {
    return cidades;
}

public void setCidades(List<Cidade> cidades) {
    this.cidades = cidades;
}

public Estado getEstado() {
    System.out.println("Getting: "+estado.getEst_nome());
    return estado;
}

public void setEstado(Estado estado) {
    this.estado = estado;
    cidades = cidDao.listarTodos(estado);
    System.out.println("Setando: "+estado.getEst_nome());
}

public List<Estado> getEstados() {
    return estados;
}

public void setEstados(List<Estado> estados) {
    this.estados = estados;
}

}[/code]

xhtml:

[code]
<p:column>


<p:selectOneMenu id=“estado” value="#{comboBean.estado}" converter=“converterEstado” >
<f:selectItem itemLabel=“Selecione” />
<f:selectItems value="#{comboBean.estados}" var=“e” itemValue="#{e}" itemLabel="#{e.est_nome}" />
<f:ajax render=“cidade” event=“change” listener="#{comboBean.listaCidades}" />
</p:selectOneMenu>


<p:message id=“estadoMessage” for=“estadoMessage” />

</p:column>
</p:row>
                        <p:row>
                            <p:column styleClass="formu">
                                <h:outputLabel for="cidade" value="Cidade" />
                            </p:column>
                            <p:column>
                                <div class="formuinput">
                                    <p:selectOneMenu id="cidade" value="#{comboBean.cidade}" converter="converterCidade" >
                                        <f:selectItem itemLabel="Selecione" />
                                        <f:selectItems value="#{comboBean.cidades}" var="c" itemValue="#{c}" itemLabel="#{c.cid_nome}" />
                                    </p:selectOneMenu>
                                </div>
                                <div class="formuerror">
                                    <p:message id="cidadeMessage" for="cidadeMessage" />  
                                </div> 
                            </p:column>[/code]

Os outros campos do formulario está tudo ok, exibe a informação correta, agora o comboBean está executando o construtor duas vezes, na primeira vez ele passo o objeto Estado corretamente, ai ele executa o construtor novamente, e fica tudo como null…
Alguem consegue enxergar a minha cagadinha? hahuhuahua

Obrigado desde já![/quote]

Eu percebi que o que ta criando o segundo construtor, é o meu formulario no xhtml do comboBean, alguem me da uma luz do que preciso fazer?

Consegui resolver, o problema é que eu tava usando construtor, mudei tudo para PostConstruct e resolveu…
Irei dar uma lida sobre o construtor e postconstruct, pq nem imagino a diferença deles.
Quem tiver um bom material sobre esses dois assuntos e suas diferenças, pode me indicar?

Obrigado!