Bom dia pessoal,
Eu fiz a pesquisa na net, mas ainda não consegui a solução para o meu problema, gostaria da ajuda de vocês. Os métodos do GenericDAO estão funcionando perfeitamente, com excessão do findById, que lança uma NPE.
Eu depurei o código, mas por não ter muita afinidade com Generics, não consegui desvendar o misterio. Seguem os códigos:
cadastro-usuario.xhtml:<h:selectOneMenu value="#{usuarioBean.idperfil}">
<f:selectItems value="#{perfilBean.listaPerfis}" var="perfil"
itemLabel="#{perfil.nome}" itemValue="#{perfil.idperfil}" />
</h:selectOneMenu>
package br.com.pirralhos.view;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import br.com.pirralhos.config.BeanFactory;
import br.com.pirralhos.model.dao.base.GenericDAO;
import br.com.pirralhos.model.entity.Perfil;
import br.com.pirralhos.model.entity.Usuario;
@ManagedBean(name = "usuarioBean")
@SessionScoped
public class UsuarioBean implements Serializable {
private static final long serialVersionUID = 1L;
private GenericDAO<Usuario, Integer> usuarioDAO = (GenericDAO<Usuario, Integer>) BeanFactory
.getBean("usuarioDAO");
private GenericDAO<Perfil, Integer> perfilDAO = (GenericDAO<Perfil, Integer>) BeanFactory
.getBean("perfilDAO");
private Usuario usuario = new Usuario();
private Usuario usuarioLogado;
private Integer idperfil;
private Perfil perfil = new Perfil();
public UsuarioBean() {
atualizarTela();
setUsuarioLogado(null);
}
public void gravar() {
Perfil fkPerfil = this.getPerfilDAO().findById(this.idperfil);
this.usuario.setFkPerfil(fkPerfil);
this.getUsuarioDAO().save(this.usuario);
this.usuario = new Usuario();
}
private void atualizarTela() {
setUsuario(new Usuario());
}
public void login() {
List<Usuario> usuarios = getUsuarioDAO().findBySQL(
"from Usuario where idusuario='" + usuario.getIdusuario() + "'"
+ "and senha='" + usuario.getSenha() + "'");
if (usuarios != null && usuarios.size() == 0) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage("Usuário ou Senha Inválido"));
}
if (usuarios.size() == 1) {
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap()
.put("ID_USUARIO", usuarios.get(0).getIdusuario());
}
}
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
.remove("ID_USUARIO");
setUsuarioLogado(null);
return "home";
}
public GenericDAO<Usuario, Integer> getUsuarioDAO() {
return usuarioDAO;
}
public void setUsuarioDAO(GenericDAO<Usuario, Integer> usuarioDAO) {
this.usuarioDAO = usuarioDAO;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Usuario getUsuarioLogado() {
return usuarioLogado;
}
public void setUsuarioLogado(Usuario usuarioLogado) {
this.usuarioLogado = usuarioLogado;
}
public Integer getIdperfil() {
return idperfil;
}
public void setIdperfil(Integer idperfil) {
this.idperfil = idperfil;
}
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public GenericDAO<Perfil, Integer> getPerfilDAO() {
return perfilDAO;
}
public void setPerfilDAO(GenericDAO<Perfil, Integer> perfilDAO) {
this.perfilDAO = perfilDAO;
}
}
package br.com.pirralhos.model.dao.base.impl;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import br.com.pirralhos.model.dao.base.GenericDAO;
public class GenericDAOImpl<T, ID extends Serializable> extends
HibernateDaoSupport implements GenericDAO<T, ID>, Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private static Log LOG = LogFactory.getLog(GenericDAOImpl.class);
@SuppressWarnings("unchecked")
public GenericDAOImpl(String className) throws ClassNotFoundException {
this.persistentClass = (Class<T>) Class.forName(className);
}
private Class<T> persistentClass;
public Class<T> getPersistentClass() {
return this.persistentClass;
}
@Override
public void delete(T entity) {
try {
this.getHibernateTemplate().delete(entity);
} catch (final HibernateException ex) {
GenericDAOImpl.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
@Override
public T findById(ID id) {
try {
return this.getHibernateTemplate().get(getPersistentClass(), id);
} catch (final HibernateException ex) {
GenericDAOImpl.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
@Override
public List<T> listAll() {
try {
return this.getHibernateTemplate().loadAll(getPersistentClass());
} catch (final HibernateException ex) {
GenericDAOImpl.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
@Override
public T save(T entity) {
try {
this.getHibernateTemplate().saveOrUpdate(entity);
return entity;
} catch (final HibernateException ex) {
GenericDAOImpl.LOG.error(ex);
throw convertHibernateAccessException(ex);
}
}
@SuppressWarnings("unchecked")
public List<T> findByCriteria(Criterion... criterion) {
Session session = null;
try {
session = this.getHibernateTemplate().getSessionFactory()
.openSession();
Criteria crit = session.createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
} catch (final HibernateException ex) {
GenericDAOImpl.LOG.error(ex);
throw convertHibernateAccessException(ex);
} finally {
session.close();
}
}
@SuppressWarnings("unchecked")
public List<T> findBySQL(String sql) {
Session session = null;
try {
session = this.getHibernateTemplate().getSessionFactory()
.openSession();
Query q = session.createQuery(sql);
return q.list();
} catch (final HibernateException ex) {
GenericDAOImpl.LOG.error(ex);
throw convertHibernateAccessException(ex);
} finally {
session.close();
}
}
}
Desde já muito obrigado e um ótimo fds a todos!
[]'s