public class ConverterDataSQL implements Converter {
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
String formatado = null;
if (value == null) {
return null;
}
Date date = null;
try {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
date = (Date) df.parse(value);
formatado = df.format(date);
} catch (ParseException e) {
throw new ConverterException("Data no Formato inválido! ");
}
return formatado;
}
public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException{
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date date = null;
try {
date = (Date) df.parse((String) value); // aqui está dando o erro
} catch (ParseException e) {
e.printStackTrace();
}
String formatado = df.format(date);
return formatado;
}
}
no faces.config.xml
<!-- CONVERSOR DE DATA SQL -->
<converter>
<converter-id>converterDataSQL</converter-id>
<converter-class>util.ConverterDataSQL</converter-class>
</converter>
java.lang.ClassCastException: java.sql.Date cannot be cast to java.lang.String
at util.ConverterDataSQL.getAsString(ConverterDataSQL.java:44)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:469)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:322)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:200)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:307)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:636)
Está dando esse erro nao sei o q pode ser. Porem o meu publicacao é do tipo Date. Se alguem puder me ajudar agradeço desde já abraços
tudo bem eu fiz assim e na minha tabela apareceu a data formatada certinha.
public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date date = null;
try {
//date = (Date) df.parse((String) value);
java.sql.Date sDate = (java.sql.Date) value;
date = new java.util.Date(sDate.getTime());
} catch (Exception e) {
e.printStackTrace();
}
String formatado = df.format(date);
System.out.println("formatado " + formatado);
return formatado;
}
porem quando estou inserindo ele dah um erro contrário ao que eu passei anteriormente. Pois quando faço a inserçao ele acusa q é string e nao sql.date.
java.lang.ClassCastException: java.lang.String cannot be cast to java.sql.Date
at util.ConverterDataSQL.getAsString(ConverterDataSQL.java:47)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:469)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:322)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:200)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:636)
09/06/2010 13:28:41 com.sun.faces.lifecycle.LifecycleImpl phase
WARNING: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@a792d3) threw exception
java.lang.NullPointerException
at java.util.Calendar.setTime(Calendar.java:1092)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:876)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:869)
at java.text.DateFormat.format(DateFormat.java:333)
at util.ConverterDataSQL.getAsString(ConverterDataSQL.java:55)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:469)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:322)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:200)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:636)
sourceId=cadastro:publicacao[severity=(ERROR 2), summary=(cadastro:publicacao: An error occurred when processing your submitted information. ), detail=(cadastro:publicacao: An error occurred when processing your submitted information. )]
public void salvar(Livros livro) throws LivrariaDAOException {
PreparedStatement ps = null;
Connection conn = null;
if (livro == null) {
throw new LivrariaDAOException("O valor passado não pode ser nulo");
}
try {
String sql = "INSERT INTO livros(isbn, titulo, edicao_num, ano_publicacao, descricao)"
+ "VALUES (?,?,?,?,?)";
conn = this.conn;
ps = conn.prepareStatement(sql);
ps.setString(1, livro.getIsbn());
System.out.println("insert.isbn " + livro.getIsbn());
ps.setString(2, livro.getTitulo());
System.out.println("insert.titulo " + livro.getTitulo());
ps.setInt(3, livro.getEdicao());
System.out.println("insert.edicao " + livro.getEdicao());
System.out.println("insert.publicacao " + livro.getPublicacao());
ps.setDate(4, livro.getPublicacao());
ps.setString(5, livro.getDescricao());
System.out.println("insert.descricao " + livro.getDescricao());
ps.executeUpdate();
//ps.clearParameters();
} catch (SQLException e) {
throw new LivrariaDAOException("Erro ao inserir os dados " + e);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
ConnectionLivrariaFactory.closeConnection(conn, ps);
}
}
Quando faço meu Insert ele acusa isso
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=cadastro:publicacao[severity=(ERROR 2), summary=(Conversion Error setting value '10/01/2013' for 'null Converter'. ), detail=(Conversion Error setting value '10/01/2013' for 'null Converter'. )]
Acredito eu q esse erro seja nullPointer. Mas como pode estar nulo se eu passo o parametro na minha JSP.
Já tentei tirar o value do inputText value="#{livrosView.livros.publicacao}", daí é lógico q fica null. Mas nao dá erro nenhum e salva normal.
pow cara fiz isso mas, ainda fica com erro q nao pode processar
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=cadastro:publicacao[severity=(ERROR 2), summary=(cadastro:publicacao: An error occurred when processing your submitted information. ), detail=(cadastro:publicacao: An error occurred when processing your submitted information. )]
Será por estou tentando salvar uma string na data?
na minha JSP eu passo String certo? ele guarda no meu bean livros #{livrosView.livros.publicacao}. Na verdade nem chega no SQL pois tenho vários System.out.println e nao imprime nenhum.
Funciona assim: o seu value vc ta passando um Date, mas dentro da tag inputText tem uma tag converter onde vc passa o padrao que vc deseja usar e as configuracoes regionais, atraves disso ele converte para este padrao quando for exibir e desconverte a string em Date quando for enviar de volta.
public void salvar(Livros livro) throws LivrariaDAOException {
System.out.println("Salvar");
PreparedStatement ps = null;
Connection conn = null;
if (livro == null) {
throw new LivrariaDAOException("O valor passado não pode ser nulo");
}
try {
String sql = "INSERT INTO livros(isbn, titulo, edicao_num, ano_publicacao, descricao)"
+ "VALUES (?,?,?,?,?)";
conn = this.conn;
ps = conn.prepareStatement(sql);
ps.setString(1, livro.getIsbn());
System.out.println("insert.isbn " + livro.getIsbn());
ps.setString(2, livro.getTitulo());
System.out.println("insert.titulo " + livro.getTitulo());
ps.setInt(3, livro.getEdicao());
System.out.println("insert.edicao " + livro.getEdicao());
// Date date = DataUtil.parseStringToDate(String.valueOf(livro.getPublicacao()));
//System.out.println("date "+date);
System.out.println("insert.publicacao " + livro.getPublicacao());
ps.setDate(4, livro.getPublicacao());
ps.setString(5, livro.getDescricao());
System.out.println("insert.descricao " + livro.getDescricao());
ps.executeUpdate();
//ps.clearParameters();
} catch (SQLException e) {
throw new LivrariaDAOException("Erro ao inserir os dados " + e);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
ConnectionLivrariaFactory.closeConnection(conn, ps);
}
}
no bean
package dao.model;
import java.io.Serializable;
import java.sql.Date;
/**
*
* @author bastos
*/
public class Livros implements Serializable {
private String isbn;
private String titulo;
private int edicao;
private Date publicacao;
private String descricao;
public Livros() {
}
/**
* @return the isbn
*/
public String getIsbn() {
return isbn;
}
/**
* @param isbn the isbn to set
*/
public void setIsbn(String isbn) {
this.isbn = isbn;
}
/**
* @return the titulo
*/
public String getTitulo() {
return titulo;
}
/**
* @param titulo the titulo to set
*/
public void setTitulo(String titulo) {
this.titulo = titulo;
}
/**
* @return the edicao
*/
public int getEdicao() {
return edicao;
}
/**
* @param edicao the edicao to set
*/
public void setEdicao(int edicao) {
this.edicao = edicao;
}
/**
* @return the publicacao
*/
public Date getPublicacao() {
return publicacao;
}
/**
* @param publicacao the publicacao to set
*/
public void setPublicacao(Date publicacao) {
this.publicacao = publicacao;
}
/**
* @return the descricao
*/
public String getDescricao() {
return descricao;
}
/**
* @param descricao the descricao to set
*/
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Livros(String isbn, String titulo, int edicao, Date publicacao, String descricao) {
this.isbn = isbn;
this.titulo = titulo;
this.edicao = edicao;
this.publicacao = publicacao;
this.descricao = descricao;
}
}
tah sem converte é pq sem querer coloquei mas tah sem
10/06/2010 13:45:09 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=cadastro:publicacao[severity=(ERROR 2), summary=(cadastro:publicacao: An error occurred when processing your submitted information. ), detail=(cadastro:publicacao: An error occurred when processing your submitted information. )]
HUm acho q achei o problema, vc ta usando o Date do sql e nao do java.util, vou dar uma pesquisada se tem como fazer pra este date.
Se voce mudar o Date dá problema pra salvar no banco?
Consegui usando o converter, não sei é a melhor maneira mas foi, segue a classe converter:
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
public class ConverterDataSQL implements Converter {
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
Date data = null;
if (value == null) {
return null;
}
java.util.Date date = null;
try {
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
date = (java.util.Date) df.parse(value);
data = new Date(date.getTime());
} catch (ParseException e) {
throw new ConverterException("Data no Formato inválido! ");
}
return data;
}
public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException{
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
try {
Date dataSql = (Date) value;
java.util.Date dataUtil = new java.util.Date(dataSql.getTime());
return df.format(dataUtil);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
retire o convertTime do input e declara o converter.
Achei tbm alguns topicos aqui no guj mesmo falando sobre isso:
Testei usando java.sql e funcionou. E usando java.util tb funfou blz.
tu me ajudou mto mto obrigadooo vou alterar o topico como resolvido
mto obrigadoooo