Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Calendar não funcionou, troquei pra java.util.Date

To usando - Windows 7 (US), com o Locale no formato Português (Brasil) mostrando as datas no formato dd/MM/yyyy - JDK7 32bits, - Tomcat 7, - As bibliotecas do projeto disponível pra download

Dá um erro de conversão de GregorianCalendar.

9 respostas

Oi Victor,

Em qual exercício isso? Ou nada funciona?

Um abraço

O problema foi na aula 5. Tenho aqui 2 cenários de testes:

Primeiro

@Temporal(TemporalType.DATE) private Calendar dataNascimento;

<p:outputLabel value="Nascimento" for="dataNascimento" /> <p:calendar id="dataNascimento" navigator="true" effect="explode" value="#{clienteBean.cliente.dataNascimento.time}" pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" />

Tenho o erro:

value="#{clienteBean.cliente.dataNascimento.time}": Target Unreachable, 'dataNascimento' returned null

Segundo

Quanto tiro o .time, tenho o erro: value="#{clienteBean.cliente.dataNascimento}": Cannot convert 23/11/13 00:00 of type class java.util.Date to class java.util.Calendar

Instancie a data de nascimento no modelo com getIntance e mantenha a chamada ao getTime no xhtml, isto é, não tire o time)... Ex. de como instanciar: private Calendar dataLancamento = Calendar.getInstance();

[]'s

Kleber, olha o erro

Cannot format given Object as a Date

@Temporal(TemporalType.DATE)
private Calendar dataNascimento = Calendar.getInstance();

Victor fiz uns testes aqui e funciona normalmente, siga as etapas.

Classe DAO - Persistir os dados no banco - Somente de exemplo poderia ser escrita melhor

package br.com.virtualinvoacoes.cursoalura.dao;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import br.com.virtualinvoacoes.cursoalura.modelo.Cliente;

public class ClienteDAO {
    private EntityManager em;

    public ClienteDAO(EntityManager em) {
        this.em = em;
    }

    public void salva(Cliente cliente){
        EntityTransaction transaction = em.getTransaction();
        try{        
        transaction.begin();
        em.persist(cliente);
        transaction.commit();
        }catch (Exception e){
            if(transaction != null || transaction.isActive()){
                transaction.rollback();
            }
        }finally{
            em.close();
        }
    }

}

Classe Cliente - Essencial ter os getters e setters

package br.com.virtualinvoacoes.cursoalura.modelo;

import java.util.Calendar;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Cliente {
    @Id
    @GeneratedValue
    private Integer id;
    @Temporal(TemporalType.DATE)
    private Calendar dataNascimento;

    public Cliente() {
        this.dataNascimento = Calendar.getInstance();
    }

    public final Integer getId() {
        return id;
    }

    public final void setId(Integer id) {
        this.id = id;
    }

    public final Calendar getDataNascimento() {
        return dataNascimento;
    }

    public final void setDataNascimento(Calendar dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

}

Classe ClienteBean - Nunca esqueça de instanciar os objetos utilizados (Cliente)

package br.com.virtualinvoacoes.cursoalura.bean;

import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import br.com.virtualinvoacoes.cursoalura.dao.ClienteDAO;
import br.com.virtualinvoacoes.cursoalura.modelo.Cliente;

@ManagedBean
public class ClienteBean {
    // O mais correto é termos uma JPAUtil por exemplo, mais o código ficaria extenso para apenas um exemplo.
    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("livro-jpa");
    private EntityManager em = emf.createEntityManager();
    private Cliente cliente;

    public ClienteBean(){
        this.cliente = new Cliente();
    }

    public final Cliente getCliente() {
        return cliente;
    }

    public final void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public void salva(){
        new ClienteDAO(em).salva(this.cliente);
    }
}

Em fim o xhtml - a única coisa a atentar é o convertDateTime

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
>

<h:head />

<h:body>

    <h:form>
        <fieldset>
            <legend>Cadastro de Cliente</legend>

            Dada de Nascimento: 
            <h:inputText value="#{clienteBean.cliente.dataNascimento.time}">
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
            </h:inputText>

            <h:commandButton value="Salvar" action="#{clienteBean.salva}"/>
        </fieldset>
    </h:form>
</h:body>
</html>

Espero ter ajudado, analise com calma este código e veja se não esqueceu nada

Resolveu Victor?

Veja se você está fazendo os import corretamente da biblioteca Calendar: "import java.util.Calendar;" Mas este erro impossibilita a execução, pq no vídeo se você reparar acontece realmente este erro, mas logo em seguida ele explica como consertar.

solução!

Agora que vi o tópico é de 2013, não tem como fechar ele não? Pois fica junto com os abertos e acabamos respondendo algo que não é mais utilizado.

Tem sim! Estou fechando Quilmer. Não precisa responder, caso contrário ele abrirá novamente.