Problema selectOneMenu (Primefaces + JSF + Hibernate)

Boa noite a todos aqui do forum,

1º Problema [Resolvido]
Estou com o seguinte problema, implementei primeiramente um selectOneMenu para o meu campo de setores e funcionou perfeitamente…
Como minha classe fechadura, possui 2 campos FK, gostaria de pegar tanto o Setor como o MAC do dispositivo ZigBee…
Quando utilizo as duas classes… ele pega somente os MAC dos dispositivos ZigBee, deixando a classe setor vazia… Alguem sabe me dizer o porque??

Solução

  @PostConstruct  
    public void carregaSelectOneMenu(){  
        SetorDao setorDAO = new SetorDao();  
        listaSetor = setorDAO.buscarTodos();  
        ZigbeeDao zigbeeDAO = new ZigbeeDao();  
        listaZigbee = zigbeeDAO.buscarTodos();  
    }

2º Problema
Agora ele não realiza o cadastro quando clico no botão salvar!!!

cadFechadura.xhtml

[code]<?xml version='1.0' encoding='UTF-8' ?>

<body>

    <ui:composition template="./template.xhtml">
        <ui:define name="content">
          <h:form id="frmCadastroFechadura">
          <p:messages autoUpdate="true"/>
          
          <p:panel header="Cadastro de Fechadura">
              <h:panelGrid columns="2" cellpadding="5">
                  <h:outputText value="ID: "/>
                  <p:inputText id="id" required="true" requiredMessage="Preenchimento obrigatório" value="#{fechaduraBean.fechadura.idfechadura}"/>

                  <h:outputText value="Nome: "/>
                  <p:inputText id="nome" required="true" requiredMessage="Preenchimento obrigatório" value="#{fechaduraBean.fechadura.nome}"/>
                  
                  <h:outputText value="Setor: "/>
                  <p:selectOneMenu id="idsetor" value="#{fechaduraBean.fechadura.idsetor}" converter="converterSetor">
                      <f:selectItem itemLabel="Selecione" />
                      <f:selectItems value="#{fechaduraBean.listaSetor}" var="set" itemValue="#{set}" itemLabel="#{set.nome}"/>
                  </p:selectOneMenu>
                  
                  <h:outputText value="ZigBee: "/>
                  <p:selectOneMenu id="idzigbee" value="#{fechaduraBean.fechadura.idzigbee}" converter="converterZigbee">
                      <f:selectItem itemLabel="Selecione" />
                      <f:selectItems value="#{fechaduraBean.listaZigbee}" var="zig" itemValue="#{zig}" itemLabel="#{zig.mac}" />
                  </p:selectOneMenu>
                  
                  <h:outputText value="Status: "/>
                   <p:selectOneMenu value="#{fechaduraBean.fechadura.status}">  
                    <f:selectItem itemLabel="Selecione" itemValue="" />  
                    <f:selectItem itemLabel="Ativo" itemValue="Ativo" />  
                    <f:selectItem itemLabel="Bloqueado" itemValue="Bloqueado" />
                    <f:selectItem itemLabel="Desabilitado" itemValue="Desabilitado" />
                   </p:selectOneMenu>  
                  
                  <f:facet name="footer">
                      <p:commandButton value="Salvar" update="frmCadastroFechadura,tabela" actionListener="#{fechaduraBean.salvar()}" icon="ui-icon-disk"/>
                    <p:commandButton value="Limpar" type="reset" />
                  </f:facet>    
                  
              </h:panelGrid>
                
               
              <p:dataTable id="tabela" var="fechadura" value="#{fechaduraBean.listarTodos()}"  >
                    <p:column>
                        <h:outputText value ="#{fechadura.nome}" />
                    </p:column>        
                    <p:column>
                        <h:outputText value ="#{fechadura.idfechadura}" />
                    </p:column>
                    <p:column>
                        <h:outputText value ="#{fechadura.idsetor}" />
                    </p:column>
            </p:dataTable>
                
       </p:panel>
        </h:form>
        </ui:define>
    </ui:composition>

</body>
[/code]

FechaduraBean

[code]package controle.fechadura;

import dao.FechaduraDao;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import modelo.Fechadura;
import modelo.Setor;
import dao.SetorDao;
import dao.ZigbeeDao;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import modelo.Zigbee;

/**
*

  • @author Ulisses
    */
    @ManagedBean
    @ViewScoped
    public class FechaduraBean {
    private Fechadura fechadura;
    private Setor setor;
    private Zigbee zigbee;
    private List listaFechadura;
    private List listaSetor;
    private List listaZigbee;

    /**

    • Creates a new instance of FechaduraBean
      */

    public FechaduraBean() {
    fechadura = new Fechadura();
    listaFechadura = new ArrayList();
    }

    public Fechadura getFechadura() {
    return fechadura;
    }

    public void setFechadura(Fechadura fechadura) {
    this.fechadura = fechadura;
    }

    public List getListaFechadura() {
    return listaFechadura;
    }

    public void setListaFechadura(List listaFechadura) {
    this.listaFechadura = listaFechadura;
    }

    public Setor getSetor() {
    return setor;
    }

    public void setSetor(Setor setor) {
    this.setor = setor;
    }

    public List getListaSetor() {
    return listaSetor;
    }

    public void setListaSetor(List listaSetor) {
    this.listaSetor = listaSetor;
    }

    public Zigbee getZigbee() {
    return zigbee;
    }

    public void setZigbee(Zigbee zigbee) {
    this.zigbee = zigbee;
    }

    public List getListaZigbee() {
    return listaZigbee;
    }

    public void setListaZigbee(List listaZigbee) {
    this.listaZigbee = listaZigbee;
    }

    public List listarTodos(){
    FechaduraDao fechaduraDAO = new FechaduraDao();
    List listaFechadura = new ArrayList();
    listaFechadura = fechaduraDAO.buscarTodos();
    return listaFechadura;
    }

    public void salvar(){
    FechaduraDao fechaduraDAO = new FechaduraDao();
    fechaduraDAO = new FechaduraDao();
    fechaduraDAO.inserir(fechadura);
    }

    @PostConstruct
    public void carregaSetor(){
    SetorDao setorDAO = new SetorDao();
    listaSetor = setorDAO.buscarTodos();
    }

    @PostConstruct
    public void carregaZigbee(){
    ZigbeeDao zigbeeDAO = new ZigbeeDao();
    listaZigbee = zigbeeDAO.buscarTodos();
    }

}
[/code]

ConverterZigbee

[code]@FacesConverter(value = “converterZigbee”)
public class ConverterZigbee implements Converter{

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value){
    if(value != null && !value.equals("")){
        ZigbeeDao dao = new ZigbeeDao();
        return dao.buscarPorId(Integer.valueOf(value));
    }
    return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value){
    if (value instanceof Zigbee){
        Zigbee zigbee = (Zigbee) value;
        return String.valueOf(zigbee.getIdzigbee());
    }
    return "";
}

}
[/code]

ConverterSetor

package controle.setor;

import dao.SetorDao;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import modelo.Setor;

/**
 *
 * @author Ulisses
 */
@FacesConverter (value = "converterSetor")
public class ConverterSetor implements Converter{
    
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value){
        if(value != null && !value.equals("")){
            SetorDao dao = new SetorDao();
            return dao.buscarPorId(Integer.valueOf(value));
        }
        return null;
    }
    
    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value){
        if (value instanceof Setor){
            Setor setor = (Setor) value;
            return String.valueOf(setor.getIdsetor());
        }
        return "";
    }
    
}

SetorDao

package dao;

import java.util.List;
import modelo.Setor;
import org.hibernate.Session;

/**
 * @author Ulisses
 */

public class SetorDao extends GenericDao {
    private Session ses;
     
    public SetorDao(){
    }
      
    public SetorDao(Session ses){
        this.ses = ses;
    }
       
    public Setor buscarPorId(Integer id) { 
        if (id == null) {
            return null;
        } else {
            ses = this.getSession();
            Setor setor = ( Setor )
            ses.get( SetorDao.class, id );
            ses.getTransaction().commit();
            ses.close();
            return setor;
        }
    }
        
    public List<Setor> buscarTodos(){
        ses = this.getSession();  
        List<Setor> listaSetor = (List<Setor>) ses.createQuery("SELECT a FROM Setor a ORDER BY a.nome").list();
        ses.getTransaction().commit();
        ses.close();
        return listaSetor;    
    }
    
     public Setor buscarPorNome(String nome){        
        ses=this.getSession();
        Setor setor = (Setor) ses.createQuery("Select p from Setor p where p.nome like ?").setString(0, "%"+nome+"%");
        ses.getTransaction().commit();
        ses.close();
        return setor;
    }
        
        
}

ZigbeeDao

[code]package dao;

import java.util.List;
import modelo.Zigbee;
import org.hibernate.Session;

/**
*

  • @author Ulisses
    */
    public class ZigbeeDao extends GenericDao{
    private Session ses;

    public ZigbeeDao() {
    }

    public ZigbeeDao(Session ses) {
    this.ses = ses;
    }

    public Zigbee buscarPorId(Integer id) {
    if (id == null) {
    return null;
    } else {
    ses = this.getSession();
    Zigbee obj = ( Zigbee )
    ses.get( SetorDao.class, id );
    ses.getTransaction().commit();
    ses.close();
    return obj;
    }
    }

    public List buscarTodos(){
    ses = this.getSession();
    List listaObj = (List) ses.createQuery(“SELECT a FROM Zigbee a ORDER BY a.mac”).list();
    ses.getTransaction().commit();
    ses.close();
    return listaObj;
    }

}
[/code]

GenericDao

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import util.HibernateUtil;

/**
*

  • @author Alunos
    */
    public abstract class GenericDao {

    //Verificado já okok

    protected Session getSession()
    {

     return HibernateUtil.getinstance().getSession();
    

    }

    public GenericDao()
    {

    }

    public String inserir(Object obj){

    try
    {
    Session ses=this.getSession();
    //ses.beginTransaction();
    ses.save(obj);
    ses.getTransaction().commit();
    ses.close();
    return “Dados inseridos com sucesso!”;
    }

      catch(Exception e)
    {
          
          return "Erro";
    }
    

    }

    public String atualizar(Object obj)
    {
    Session ses=this.getSession();
    ses.flush();
    ses.clear();
    // ses.beginTransaction();
    ses.update(obj);
    ses.getTransaction().commit();
    ses.close();
    return “Dados atualizados com sucesso!”;
    }

    public String remover(Object obj)
    {
    Session ses = this.getSession();
    //ses.beginTransaction();
    ses.delete(obj);
    ses.getTransaction().commit();
    ses.close();
    return “Dados removidos com sucesso!”;
    }

}
[/code]