Olá a todos!
Estou estudando JSF + JPA e Hibernate e tó apanhando um pouco! Estou tentando implementar um crud simples chamado usuario. A tela jsf tem um formulário simples e para cada inserção uma lista aparece abaixo com as opções de excluir e remover. Estou me baseando nas aulas do kurtphpr. Contudo, o meu usuário tem uma tipo de usuario, que pode ser admin, usuário normal, usuário médio, ect… Implementei um selectOneMenu com o seu Conversor. O problema é que para buscar da grid o meu usuário eu tenho um <h:inputHidden value="#{usuarioBean.usuario}"/> e por essa razão não consigo seguir adiante, pois devido a esse problema não é possível fazer a conversão.
Segue o usuario bean:
ManagedBean(name="usuarioBean")
@RequestScoped
public class UsuarioBean {
private Usuario usuario = new Usuario();
private List<Usuario> lista;
private List<SelectItem> listaItens;
private TipoUsuario tipoUsuario = new TipoUsuario();
public void salvar(){
Session session = HibernateUtil.getSession().openSession();
session.getTransaction().begin();
usuario.setData_criacao(new Date());
if(usuario.getId() == 0){
//System.out.println("finelamente "+tipoUsuario.getTipo());
//TipoUsuario tp = (TipoUsuario) session.get(TipoUsuario.class, 7);
//usuario.setTipoUsuario(tp);
session.persist(usuario);
FacesMessage face = new FacesMessage("Usuário cadastrado com sucesso.");
FacesContext contexto=FacesContext.getCurrentInstance();
contexto.addMessage(null, face);
}else{
session.update(usuario);
}
session.getTransaction().commit();
session.close();
lista=null;
}
@SuppressWarnings("unchecked")
public List<Usuario> getTodosOsUsuarios(){
if(lista == null){
Session session = HibernateUtil.getSession().openSession();
Criteria c = session.createCriteria(Usuario.class);
lista = c.list();
}
return lista;
}
public void excluir(){
Session session = HibernateUtil.getSession().openSession();
session.getTransaction().begin();
session.delete(this.usuario);
session.getTransaction().commit();
session.close();
lista = null;
}
public void novo(){
usuario= new Usuario();
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public static TipoUsuario buscarTipoUsuario(int id){
Session session = HibernateUtil.getSession().openSession();
session.getTransaction().begin();
TipoUsuario tp = (TipoUsuario) session.get(TipoUsuario.class, id);
return tp;
}
public List<SelectItem> buscarCategorias() {
List<TipoUsuario> listaTipoUsuario= new ArrayList<TipoUsuario>();
Session session = HibernateUtil.getSession().openSession();
Criteria c = session.createCriteria(TipoUsuario.class);
listaTipoUsuario = c.list();
listaItens = new ArrayList<SelectItem>(listaTipoUsuario.size());
for(TipoUsuario i:listaTipoUsuario){
listaItens.add(new SelectItem(i,i.getTipo()));
}
return listaItens;
}
public TipoUsuario getTipoUsuario() {
return tipoUsuario;
}
public void setTipoUsuario(TipoUsuario tipoUsuario) {
this.tipoUsuario = tipoUsuario;
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:loadBundle basename="resources.application" var="msg"/>
<ui:composition template="/templates/template.xhtml">
<ui:define name="pageTitle">#{msg.header}</ui:define>
<ui:define name="pageHeader">Cadastro de Usuário</ui:define>
<ui:define name="body">
<h:form id="edicao">
<h:messages/>
//Preciso do inputHidden para quando o usuario for editar
<h:inputHidden value="#{usuarioBean.usuario}"/>
<h:panelGrid columns="2">
<h:outputLabel value="Login"/>
<h:inputText value="#{usuarioBean.usuario.login}" required="true" requiredMessage="Login é um Campo Obrigitário!"/>
<h:outputLabel value="Senha"/>
<h:inputSecret value="#{usuarioBean.usuario.senha}" required="true" requiredMessage="Senha é um Campo Obrigitário!"/>
<h:outputLabel value="Email"/>
<h:inputText value="#{usuarioBean.usuario.email}" required="true" requiredMessage="Email é um Campo Obrigitário!">
<f:validator validatorId="email"/>
</h:inputText>
[size=18] [color=red] //NA PRIMEIRA VEZ NÃO TEM USUARIO E PORTANTO NEM UM TIPO DE USUARIO(QUE PODE SER ADMIN, ESPECIAL, NORMAL, ECT..), PORTANTO BUSCO DA BASE DE DADOS. O PROBLEMA É JUSTAMENTE QUANDO TENDO SALVAR OS DADOS. POIS O JSF NÃO CONSEGUE FAZER A CONVERSÃO.[/color][/size]
<h:outputLabel value="Defina o Tipo de Usuário:" />
<h:selectOneMenu value="#{usuarioBean.tipoUsuario}">
<f:selectItems value="#{usuarioBean.buscarCategorias()}"/>
</h:selectOneMenu>
</h:panelGrid>
<h:commandButton action="#{usuarioBean.salvar()}" value="salvar" />
<h:commandButton action="#{usuarioBean.novo()}" value="novo usuário" />
</h:form>
<h:form id="lista">
<h:dataTable value="#{usuarioBean.todosOsUsuarios}" var="usuario" border='2' rendered="#{not empty usuarioBean.todosOsUsuarios}">
<f:facet name="header">Listagem de Usuários</f:facet>
<h:column>
<f:facet name="header">Login</f:facet>
#{usuario.login}
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
#{usuario.email}
</h:column>
<h:column>
<f:facet name="header">Tipo Usuário</f:facet>
#{usuario.tipoUsuario.tipo}
</h:column>
<h:column>
<f:facet name="header">Data Criação</f:facet>
<h:outputText value="#{usuario.data_criacao}">
<f:convertDateTime dateStyle="medium"/>
</h:outputText>
#{usuario.data_criacao}
</h:column>
<h:column>
<f:facet name="header"> Ações</f:facet>
<h:commandLink value="" action="#{usuarioBean.excluir}" onclick="if (!confirm('Deseja realmente excluir o usuário #{usuario.login}?'))return false;">
<h:graphicImage library="imagens" name="remove-icon.png" />
<f:setPropertyActionListener target="#{usuarioBean.usuario}" value="#{usuario}" />
</h:commandLink>
<h:commandLink>
<h:graphicImage library="imagens" name="wrench-icon.png"/>
<f:setPropertyActionListener target="#{usuarioBean.usuario}" value="#{usuario}" />
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</html>