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