Duvida com datas no JSF

29/01/2010

Bom dia,

Estou com certa dificuldade com datas no JSF ...

tenho uma tabela no BD com um campo date  ....

Mas estou recebendo o seguinte erro ao tentar inserir a data no BD:

java.lang.IllegalArgumentException: argument type mismatch



Segue minha entidade:

import java.sql.Date;

public class Usuario {
   
    private int id;
    private String nome;
    private String email;
    private Date nasc;
   
getters e setters


meu UsuarioDao:

public class UsuarioDao extends Dao {

    public UsuarioDao(){
        super();
    }
   
    PreparedStatement ps = null;
       
   
    public void addUsuario(Usuario user)throws Exception{
        abre();       
        ps = con.prepareStatement("insert into usuario values(null, ?,?,?)");
        ps.setString(1, user.getNome());
        ps.setString(2, user.getEmail());
        ps.setDate(3, user.getNasc());
        ps.execute();
        ps.close();
        fechar();
    }
   
}

meu managedBean:

public class UsuarioFace {
   
   
    private UsuarioDao ud = new UsuarioDao();
    private Usuario user;       
   
   
   

    public String preparaAddUsuario(){
       
        user = new Usuario();
        return "goToAddUsuario";
       
    }
   
   
    public String addUsuario() throws Exception{
        ud.addUsuario(user);
        return "usuarioCadastrado";
    }
   
getters e setters


jsp com form de cadastro:

<f:view>
        <h1>Adicionar novo usuário </h1><br/>
       
        <h:form>
        Nome <h:inputText id="nome" required="true" value="#{usuarioFace.user.nome}">
       
             </h:inputText><h:message for="nome"/><br/>
            
        Email <h:inputText id="email" required="true" value="#{usuarioFace.user.email}">
       
             </h:inputText><h:message for="email"/><br/>
            
        Nascimento <h:inputText id="nasc" required="true" value="#{usuarioFace.user.nasc}">
                   <f:convertDateTime pattern="dd/MM/yyyy" />
             </h:inputText><h:message for="nasc"/><br/><br/>
            
             <h:commandButton action="#{usuarioFace.addUsuario}" value="Add usuário"/>         
            
        </h:form>
       
    </f:view>

Como posso resolver isso??

Grato
Cleiton Tavares.

Cleiton Tavares.

Curtidas 0

Respostas

Dyego Carmo

Dyego Carmo

29/01/2010

Por favor , cole o exception INTEIRO para que eu consiga analisar aonde esta o problema
GOSTEI 0
Dyego Carmo

Dyego Carmo

29/01/2010

Se eu nao me engano JSF soh trabalha com java.util.Date e nao java.sql.Date , tente trocar tambem...
GOSTEI 0
Cleiton Tavares.

Cleiton Tavares.

29/01/2010

Diego,

Mudei pra util>Date na minha entidade ... , mas no UsuarioDao estou sendo forçado a fazer um cast pra sql.Date:

ps.setDate(3, (Date) user.getNasc());

...ai me retorna a exception abaixo:

Apache Tomcat/6.0.13 - Error reportjava.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date dao.UsuarioDao.addUsuario(UsuarioDao.java:23) controle.UsuarioFace.addUsuario(UsuarioFace.java:25) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.apache.el.parser.AstValue.invoke(AstValue.java:131) org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68) javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77) com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91) javax.faces.component.UICommand.broadcast(UICommand.java:383) javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752) com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
GOSTEI 0
Dyego Carmo

Dyego Carmo

29/01/2010

Crie um java.sql.Date apartir de um java,util.Date

public class MainClass {

  public static void main(String[] args) {
    java.util.Date utilDate = new java.util.Date();
    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
    System.out.println("utilDate:" + utilDate);
    System.out.println("sqlDate:" + sqlDate);

  }

}
GOSTEI 0
Dyego Carmo

Dyego Carmo

29/01/2010

Opa , problema resiolvido ?

GOSTEI 0
Cleiton Tavares.

Cleiton Tavares.

29/01/2010

opa Dyego,

Desculpe pela demora ... estava de férias e deixeu um pouco os codigos de lado.
Mas esta tudo OK ...

Obrigado
GOSTEI 0
POSTAR