Converter data em primeface

boa noite pessoal, como faço pra converter um String para date em primeface??

aqui é o meu código xhtml

<p:inputMask id="dt_nasc" 
                                     value="#{pacienteController.paciente.dt_nasc}"
                                     mask="99/99/9999"
                                     style="height:20px; font-size: 13px; width: 80px"/>

aqui é o código Paciente.java

package br.com.clinica.model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Temporal;

@Entity(name = "paciente")
public class Paciente implements Serializable {
    
    @Id
    @GeneratedValue   
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_nasc;

 public Date getDt_nasc() {
        return dt_nasc;
    }

    public void setDt_nasc(Date dt_nasc) {
        this.dt_nasc = dt_nasc;
    }

como faço essa conversão e onde coloco o código de conversão??

estou começando agora com java web e primeface, por favor, alguém poderia me ajudar, seria muito grato.

Voce precisa criar um converter do JSF: http://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/1.2_MR1/docs/api/javax/faces/convert/Converter.html

humm… não tem exemplo de código nesse link que você passou… você não teria um exemplo de código pra mandar ou então se quiser modificar algo no meu, fique a vontade se não for pedir demais.

Dando uma pesquisada, vi que tem até converter pronto… eu não conhecia: http://www.mkyong.com/jsf2/jsf-2-convertdatetime-example/

Dica: Procure as coisas no Google, ainda mais pra coisas básicas assim, tem de monte

já pesquisei bastante mas não encontrei muita coisa não… :frowning:

mas vou procurar mais um pouco, qualquer coisa eu retorno aqui, mas de qualquer forma eu lhe agradeço igor_ks.

Eu te passei o link ali em cima…

esse link que você me passou, meu código já está exatamente assim, olhe pra você ver:

@Temporal(javax.persistence.TemporalType.DATE)
    private Date dt_nasc;

public Date getDt_nasc() {
        return dt_nasc;
    }

    public void setDt_nasc(Date dt_nasc) {
        this.dt_nasc = dt_nasc;
    }

porém, acredito que o que eu tenho que converter é o que o usuário digitar, porque o que o usuário digitar vem como String e preciso converter essa String para Date, mas não sei como e nem onde no meu código fazer essa conversão usando primeface.

E no seu xhtml?

esse é o código do meu xhtml

<p:inputMask id="dt_nasc" 
                                     value="#{pacienteController.paciente.dt_nasc}"
                                     mask="99/99/9999"
                                     style="height:20px; font-size: 13px; width: 80px"/>

e aqui o meu pacienteController:

package br.com.clinica.controller;  
  
import br.com.clinica.dao.PacienteDao;  
import br.com.clinica.dao.InterfacePaciente;  
import br.com.clinica.model.Paciente;  
import java.awt.event.ActionEvent;  
import java.text.ParseException;  
import java.util.List;  
import javax.faces.bean.ManagedBean;  
import javax.faces.bean.SessionScoped;  
import javax.faces.event.AjaxBehaviorEvent;  
import javax.faces.model.DataModel;  
import javax.faces.model.ListDataModel;  
import org.primefaces.context.RequestContext;  
  
  
@ManagedBean  
@SessionScoped  
public class PacienteController {  
  
    private Paciente paciente;  
    private DataModel listaPaciente;  
      
    public PacienteController(){    
            this.paciente = new Paciente();  
            this.paciente.setCarteirinha_emitida("SIM");
            this.paciente.setCobranca_empresa("SIM");
     }   
 
  
    public Paciente getPaciente() {  
        if (this.paciente == null) {  
            this.paciente = new Paciente();  
        }  
        return paciente;  
    }  
  
    public void setPaciente(Paciente paciente) {  
        this.paciente = paciente;  
    }  
  
    public DataModel getListaPaciente() {  
        List<Paciente> lista = new PacienteDao().list();  
        listaPaciente = new ListDataModel(lista);  
        return listaPaciente;  
    }  
  
    public void prepararAdicionarPaciente(ActionEvent actionEvent) {  
        paciente = new Paciente();  
    }  
  
    public void prepararAlterarPaciente(ActionEvent actionEvent) {  
        paciente = (Paciente) (listaPaciente.getRowData());  
    }  
  
    public void adicionar(ActionEvent actionEvent) throws ParseException {          
        InterfacePaciente dao = new PacienteDao();  
        dao.salvar(paciente);          
  
    }      
  
    public String excluir() {  
        Paciente paciente = (Paciente) (listaPaciente.getRowData());  
        InterfacePaciente dao = new PacienteDao();  
        dao.remover(paciente);  
        return "paciente";  
    }  
  
    public void clear(AjaxBehaviorEvent event) {  
        this.paciente = null;  
    }  
  
    public void reset() {  
        RequestContext.getCurrentInstance().reset("form:dialog");  
    }  
  
    public void atualizarPaciente() {  
        InterfacePaciente dao = new PacienteDao();  
        dao.atualizar(paciente);          
        RequestContext.getCurrentInstance().closeDialog(paciente);  
    }      
  
    public String carregarPaciente(Paciente c) {  
        paciente = c;          
        return "pacienteAlterar";  
    }  
      
    public void choosePaciente() {  
        this.prepararAlterarPaciente(null);  
        RequestContext.getCurrentInstance().openDialog("pacienteAlterar");  
    }  
} 

Vc nao colocou o converter no seu xhtml…
vc viu todo o link q te passei?

eu não tinha percebido o restante do código do link que você enviou, acrescentei essa linha de código:

<f:convertDateTime pattern="d/M/yyyy" /> no meu código xhtml e ficou assim:

<p:inputMask id="dt_nasc" value="#{pacienteController.paciente.dt_nasc}" mask="99/99/9999" style="height:20px; font-size: 13px; width: 80px"> <f:convertDateTime pattern="d/M/yyyy" /> </p:inputMask>

dessa maneira consegui inserir a data, mas está estranho, se eu digitar a data 22/06/1988 que é a minha data de nascimento, ele insere no banco a data do dia anterior 21/06/1988 e
isso está acontecendo pra qualquer data que eu digitar…

o que pode ser isso?

resolvi parte do problema com esse link http://www.guj.com.br/java/263937-aplicacao-grava-data-com-um-dia-antes-da-que-foi-digitada,

acrescentei os atributos timeZone=“GMT-3” e locale=“pt_BR” a tag <f:convertDateTime /> e está gravando com a data que eu digitar,
mas no momento de recuperar a data do banco de dados, ele ainda continua me trazendo a data de um dia anterior a data cadastrada, porém no
bando de dados está correto, o erro é somente para a recuperação das informações de datas.

alguém sabe o que pode estar acontecendo e alguma solução pra isso?

Ninguém sabe algo a respeito disso?? :frowning:

Vc está usando o mesmo componente para as duas situações?
Posta o xhtml do seu componente que vc salva os dados, e o que vc traz os dados

Colocou o convertDateTime com GMT onde mostra a saída também?

Oi pessoal, eu estive muito tempo a procura da solução para esta questão e agora esta disponivel nesta pagina…

funciona para o caso da inserção e da leitura… funcionou para mim