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

Conversão de Date para Calendar

Fiz as alterações para persistir como Date no banco ao invés de String. Segui o material fazendo a seguinte alteração

<h:inputText id="dataLancamento" value="#{livroBean.livro.dataLancamento.time}"> 
   <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" />
</h:inputText>

No entanto agora dá o seguinte erro:

javax.servlet.ServletException: javax.el.PropertyNotFoundException: /livro.xhtml @37,54 value="#{livroBean.livro.dataLancamento.time}": Target Unreachable, 'dataLancamento' returned null
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Imagino que isso seja ocasionado porque não há nada em dataLancamento fazendo com que cause o erro, para tentar contornar, retirei o .time, deixando o código desta forma:

<h:inputText id="dataLancamento" value="#{livroBean.livro.dataLancamento}"> 
   <f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo" />
</h:inputText>

Só que agora está apresentando outro erro, ao passar a data 12/12/2010:

javax.servlet.ServletException: javax.el.ELException: /livro.xhtml @37,49 value="#{livroBean.livro.dataLancamento}": Cannot convert 11/12/10 23:00 of type class java.util.Date to class java.util.Calendar
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Tentei usar também o , mas não mudou o resultado.

Desde já, obrigado!

4 respostas

tenta trocar o importa da sua classe livro de java.util.Calendar para java.util.Date

solução!

Amigo, tive o mesmo erro e segue a solução para mim 1-volte o EL para mostrar livroBean.livro.dataLancamento.time pois o converter precisa dessa referencia para trabalhar corretamente 2 - durante a alteração da classe Livro em que o atributo da data foi mudado para Calendar ao inves de String inicialize a variável "private Calendar dataLancamento = Calendar.getInstance();"

Muito obrigado João, não quis mudar para Date porque o material segue usando Calendar e não queria mudar a estrutura básica, pois substituindo para Date haveria a necessidade de mudar outros pontos do código.

Valeu Fábio, resolveu meu problema. Nem tinha pensado em instanciar o dataLancamento, e era por isso que retornava o null quando ia acessar o getTime(). E essa solução fez eu entender porque nos exemplos do material sempre o Data Lançamento vem preenchido.

Muito obrigado a todos que responderam.