Gostaria de saber se existe alguma forma de resolver isso, sem ter que mudar o tipo da variavel, dtNascimento para String, lá no Bean?
Muito obrigado a todos.
Esse seu objeto Date é:
java.util.Date ou java.sql.Date?
Tente usar o java.util.Date.
Abraço.
caiomacedor
Também deu erro ao converter…
WARNING: Unhandled exception
javax.servlet.ServletException: BeanUtils.populate
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:475)
at org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
at org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.commons.beanutils.ConversionException: DateConverter does not support default String to 'Date' conversion.
at org.apache.commons.beanutils.converters.DateTimeConverter.toDate(DateTimeConverter.java:468)
at org.apache.commons.beanutils.converters.DateTimeConverter.convertToType(DateTimeConverter.java:343)
at org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:156)
at org.apache.commons.beanutils.converters.ConverterFacade.convert(ConverterFacade.java:60)
at org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:470)
at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1006)
at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830)
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:433)
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:473)
T
Thiago_Domingues
Iai Cara, tudo bem? Então, creio que seu problema seja na hora de instanciar o bean, ele não consegue fazer a conversão de String que é o que chega do seu formulário para um tipo Date, em JSF tem um conversor <f:convertDateTime pattern=“dd/MM/yyyy” /> que faz isso, em struts eu não sei. Mas não tem como você criar uma action que recebe essa string e instancia esse Date pra você ou algo do tipo??
se o que eu disse não tiver nada a ver, me corrijam.vlw…
caiomacedor
Acontece que pelo que vejo, ao submet o formulaario ele vai primeiro la no form para setar os valores no bean, aí é onde rola o error.
Se vc digitar a data no formato correto, funciona?
caiomacedor
digito assim por exemplo 01/01/2009
fabiozoroastro
Ainda não está sendo utilizado o seu conversor:
caiomacedor
Mas o que esta errado então pra que ele ainda não esta sendo usado?
fabiozoroastro
Vc colocou um breakpoint no construtor do seu form pra ver se ele realmente entra aí?
caiomacedor
Coloquei um breakPoint no construtor, ele chega no construtur do Form. Dai dei um F5 ele vai pra Classe DateBeanConvert, mas não entra nesse metodo:
public Object convert(Class classe, Object object) {
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date date = null;
try {
date = format.parse((String)object);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
fabiozoroastro
Ele só vai entrar neste método quando o form for submetido.
Estranho ele não setar o registrador…
Esse Date.class que vc setou é java.util.Date(igual ao atributo java.util.Date) da classe Pessoa?
caiomacedor
Ô fera obrigado pela dica, o Date que esta no Form estava errado rsrs. Ele era um import java.sql.Date;
Fiz a correção e agora funfou…
Valew obrigado a todos.
fabiozoroastro
Eheh, falou. Abraço.
caiomacedor
Mas uma rsrs… Se eu quiser deixar com import java.sql.Date;? Como eu tenho que colocar aqui no conversor: date = format.parse((String)object);
porque dessa forma esta dando erro. E se eu faço um Cast pra Date, depois da erro na converção.
fabiozoroastro
Em qual momento vc faz cast para java.sql.Date? Posta o seu código de conversão aqui.
Caio, você não pode usar somente a java.util.Date? Geralmente vc só precisa usar o java.sql.Date se for implementar as suas querys com JDBC.
javax.skol
Isso caiomacedor
faça como fabio… falou
mude pra java.util.Date e teste
caiomacedor
Sim fiz isso e já funcionou, mas e no caso de fazer persitencia com um banco, usando PreparedStatement? Ai vou precisar de um sql.Date. Por isso que ja queria converter pra esse tipo.