depois de nadar e morrer na praia vamos pedindo ajuda…
quero salvar um cliente que tem uma cidade.
o problema é simples eu é q não descobri qual parafuso apertar, a entidade cidade ja tem estado junto, na mesma tabela, coloquei uns println pra ver o q saia no momento em que tentava salvar ou alterar um registro, e o resultado era que não dava erro nenhum, passava pelos métodos do cidadeConverter e nem chega no meu método de salvar os dados. não consegui resolver sozinho por isso peço ajuda dos companheiros aqui do guj
isso está na minha view:
<h:selectOneMenu id="cidade" value="#{clienteController.cliente.cidade}" converter="cidadeConverter" >
<f:selectItems value="#{clienteController.cidades}" var="cid" itemValue="#{cid}" itemLabel="#{cid.cidade}" />
</h:selectOneMenu>[/code]
minha entidade
[code]package entidades;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
*
* @author Magno Max
*/
@Entity
@Table(name = "cidade")
public class Cidade implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Basic(optional = false)
private Long idcidade;
private String cidade;
private String estado;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "cidade", fetch=FetchType.LAZY)
private List<Cliente> clienteList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "cidade", fetch=FetchType.LAZY)
private List<Livro> livroList;
public Cidade() {
}
public Cidade(Long idcidade) {
this.idcidade = idcidade;
}
public Long getIdcidade() {
return idcidade;
}
public void setIdcidade(Long idcidade) {
this.idcidade = idcidade;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public List<Cliente> getClienteList() {
return clienteList;
}
public void setClienteList(List<Cliente> clienteList) {
this.clienteList = clienteList;
}
public List<Livro> getLivroList() {
return livroList;
}
public void setLivroList(List<Livro> livroList) {
this.livroList = livroList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (idcidade != null ? idcidade.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Cidade)) {
return false;
}
Cidade other = (Cidade) object;
if ((this.idcidade == null && other.idcidade != null) || (this.idcidade != null && !this.idcidade.equals(other.idcidade))) {
return false;
}
return true;
}
}
cidadeConverter.java
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package beans;
import dao.DaoFactory;
import entidades.Cidade;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
/**
*
-
@author seduc
*/
@FacesConverter(value = “cidadeConverter”, forClass = Cidade.class)
public class cidadeConverter implements Converter {@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException {
if (arg2 == null || arg2.length() == 0) {
return null;
}
Long id = new Long(arg2);
boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
if (hasTransaction == false) {
DaoFactory.getInstance().beginTransaction();
}System.out.println("Convertendo a porcaria:"+DaoFactory.getInstance().getCidadeDao().getCidadeByIdcidade(id).getIdcidade()); return DaoFactory.getInstance().getCidadeDao().getCidadeByIdcidade(id);
}
@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof Cidade) {
Cidade o = (Cidade) object;
System.out.println(“Convertendo a porcaria:”+o.getCidade().toString());
return o.getIdcidade() == null ? “” : o.getIdcidade().toString();
} else {
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + “; expected type: entidades.Cidade”);
}
}
}
[/code]
ClienteController.java
[code] public void saveOrUpdate(ActionEvent actionEvent) {
boolean hasTransaction = DaoFactory.getInstance().hasTransaction();
if (hasTransaction == false) {
DaoFactory.getInstance().beginTransaction();
}
if (getCliente() != null) {
System.out.println("Cidade salva: "+ cliente.getCidade().getCidade());
DaoFactory.getInstance().getClienteDao().insertOrUpdate(cliente);
try {
DaoFactory.getInstance().commit();
SessionUtil.addSuccessMessage(“saveSuccess”);
if (isInsert() == true) {
cliente = new Cliente();
}
} catch (Exception e) {
DaoFactory.getInstance().rollBack();
SessionUtil.addErrorMessage(“saveFail”);
} finally {
if (hasTransaction == false) {
DaoFactory.getInstance().close();
}
}
} else {
SessionUtil.addSuccessMessage("objectEmpty");
cliente = new Cliente();
}
}
[/code]