Ola, não sei se alguém pode me ajudar mas é o seguinte, estou desenvolvendo uma aplicação com JSF 2.0 e tenho minha classe modelo Cidade da seguinte forma:
@Entity
@Table(name = "cidade")
@NamedQueries({
@NamedQuery(name = "Cidade.findAll", query = "SELECT c FROM Cidade c")})
public class Cidade implements Serializable {
@Id
@Basic(optional = false)
@Column(name = "cidcodigo", nullable = false)
private Long cidCodigo;
@Basic(optional = false)
@Column(name = "nome", nullable = false, length = 100)
private String nome;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "estsigla", nullable = false)
private Estado estado;
public Cidade() {
}
public Cidade(Long cidCodigo) {
this.cidCodigo = cidCodigo;
}
public Cidade(Long cidCodigo, String nome) {
this.cidCodigo = cidCodigo;
this.nome = nome;
}
public Long getCidCodigo() {
return cidCodigo;
}
public void setCidCodigo(Long cidCodigo) {
this.cidCodigo = cidCodigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
@Override
public int hashCode() {
int hash = 0;
hash += (cidCodigo != null ? cidCodigo.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Cidade)) {
return false;
}
Cidade other = (Cidade) object;
if ((this.cidCodigo == null && other.cidCodigo != null) || (this.cidCodigo != null && !this.cidCodigo.equals(other.cidCodigo))) {
return false;
}
return true;
}
depois tenho meu Managed bean da seguinte forma:
@ManagedBean(name = "cidadeBean")
@SessionScoped
public class CidadeBean implements MB {
private Cidade cidade;
private Dao.Cidade cDao = DAOFactory.instance(DAOFactory.HIBERNATE).getCidade();
private DataModel listaCidade;
@Override
public DataModel getLista() {
List<Cidade> lista = HibernateUtil.getCurrentSession().getNamedQuery("Cidade.findAll").list();
listaCidade = new ListDataModel(lista);
return listaCidade;
}
@Override
public void prepararAdicionar(ActionEvent evt) {
setCidade(new Cidade());
}
@Override
public void prepararAlterar(ActionEvent evt) {
setCidade((Cidade) listaCidade.getRowData());
}
@Override
public void adicionar(ActionEvent evt) {
cDao.save(getCidade());
}
@Override
public void alterar(ActionEvent evt) {
cDao.save(getCidade());
}
@Override
public String excluir() {
cDao.delete((Cidade) listaCidade.getRowData());
return "cidade";
}
//método para lookup de estados
public List<SelectItem> getEstados() {
List<SelectItem> toReturn = new LinkedList<SelectItem>();
List<Estado> tudo = HibernateUtil.getCurrentSession().createQuery("from Estado e order by e.estSigla").list();
for (Estado est : tudo) {
toReturn.add(new SelectItem(est.getEstSigla(), est.getNome()));
}
return toReturn;
}
// gets e sets
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
e a na página está assim:
<h:outputLabel for="nome" value="Nome:" />
<h:inputText id="nome" value="#{cidadeBean.cidade.nome}"/>
<h:outputLabel for="estado" value="Estado:" />
<h:selectOneMenu id="estado" value="#{cidadeBean.cidade.estado}">
<f:selectItems value="#{cidadeBean.estados}"/>
</h:selectOneMenu>
<p:commandButton update="tabela" oncomplete="dialogInCity.hide();" actionListener="#{cidadeBean.adicionar}" value="Inserir"/>
<p:commandButton oncomplete="dialogInCity.hide();" value="Cancelar"/>
Estou tendo problemas no adicionar e alterar, preparAlterar e excluir está ok, como faço para pegar o estado como objeto?