Conversor Vraptor

15 respostas
A

Pessoal… nao estou conseguindo implementar o conversor…
Tenho um campo no banco do tipo datahora…(yyyy-mm-dd hh:mm:ss)
como irei fazer isso com o vraptor?

Obrigada

:wink:

15 Respostas

L

Olá Ana!

A tua dúvida está em mostrar essa data formatada no jsp certo?

Se for, tu pode fazer da seguinte maneira:

<fmt:formatDate pattern="dd/MM/yyyy HH:mm:ss" value="${TUA_DATA}" />
A

A duvida eh passar do FORM para a Logica no formato certo… :slight_smile:
A pessoa ira digitar a datahora

Thanks
:wink:

von.juliano

Não seria só declarar no seu logic:

@Parameter
private String data;

E depois passar a String para um construtor de Date (estando a String no formato correto) e aí mandar para o banco?

Desculpe se o que sugeri não tem nada a ver, mas não entendi direito sua dúvida! :roll:

L

Mas isso ocorre de forma automática. Não tem pq se preocupar com isso.

A

De forma automatica em termos ne?
Depende do meu locale… dependendo do locale a pessoa vai ter que digitar de um formato… estou certa ou errada?
Se eu colocar o fmt ele elimina isso?

uma outra divida de hibernate…
no meu campo eu tenho um campo datahora… so que eu quero buscar datainicial e datafinal… como eu faco isso no BEAN?

Obrigada pessoal… :lol:

L

O que tu pode fazer é setar o Locale no teu JSP, assim evita que um problema como este aconteça.

Sobre a tua dúvida no hibernate, desculpa, mas não entendi direito.
Na tua query tu faz um between normal no campo da data usando as datas de início e fim como delimitadores.
por exemplo:

from ENTIDADE where data between ? and ?

onde ? == dataInicial e dataFinal.

A

Isso msm Lucas… :smiley:
so que no formulario vou entrar com a datainicial e datafinal…
Como irei implementar isso? sendo que so existe um campo data no banco…

Desculpe se minha duvida eh idiota :smiley: eh q estou iniciando…

Obrigada

:wink:

no meu DAO esta:

Query q =this.session.createQuery("Select m FROM Dados as m WHERE m.nome = :nome and m.datahora>=:datahora and m.datahora<=:datahora");

nao sei como ficaria… :smiley:

L

Acredito que assim deva funcionar. :wink:

Query q = this.session.createQuery("Select m FROM Dados as m WHERE m.nome = :nome and m.datahora between :datahora and :datahora");
A

Mas no caso… o formulario serao duas datas: datai e dataf
E terao q estar no meu bean…se nao ele nao acha… :smiley:

Se eu colocar:

Query q = this.session.createQuery("Select m FROM Dados as m WHERE m.nome = :nome and m.datahora between :datahora and :datahora");
q.setParameter("nome",m.getNome());
q.setParameter("datahora",m.getDatahora());

Minha duvida eh como mapear essa datai e dataf :smiley: ja que no meu BEAN so tem data :smiley:

meu form

<form method="POST" action="dado.lista.logic">
   <p>ID <input type="text" name="dado.nome" size="20">&nbsp; DATAHORA(yyyy-mm-dd 
  hh:mm:ss)<input type="text" name="dado.datahora" size="20">&nbsp; DATAHORA(yyyy-mm-dd 
  hh:mm:ss)<input type="text" name="dado.datahora" size="20"></p>
  <p>&nbsp;</p>
  <p><input type="submit" value="Buscar" name="B1"></p>
</form>

Confusao :smiley:

Obrigada :wink:

L

É neste caso tu deveria ter duas datas no teu Bean.
Mas tu também pode ter essas duas datas dentro da tua classe Logic.

tipo:

@Out
@Parameter
private Date dataInicial

@Out
@Parameter
private Date dataFinal

A

Bom… funcionou desse jeito…
Porem ao invez de Date coloquei String…
pq com o Date ele da erro de conversao…

Se eu colocar como Date? como posso fazer? nao entendi ate agora :frowning:
no caso meu campo Date teria que ser yyyy-mm-dd hh:mm:ss
Pode me dar um help?

Obrigada pela Ajuda…

:wink:

L

Hmmm, estranho, ele deve funcionar tranquilamente com Date.

Teria como postar o fonte da tua classe Logic?

A

Fiz uma Logica onde recebo como argumente o ID e a DATAHORA, nao sei se esta certo… mas meu codigo esta abaixo:

Meu Bean:
Code:

@Entity
 @IdClass(DadosMPK.class)
 public class DadosM
 {
 
 	@Id
 	@Temporal(TemporalType.TIMESTAMP)
 	private Date datahora;
 	
 	@Id
 	private Integer id;
 		
 	public Date getDatahora() {
 		return datahora;
 	}
 	public void setDatahora(Date datahora) {
 		this.datahora = datahora;
 	}
 	public Integer getId() {
 		return id;
 	}
 	public void setId(Integer id) {
 		this.id = id;
 	}
 	
 }

Como eh chave composta criei a Classe DadosMPK
Code:

@Embeddable
 public class DadosMPK implements Serializable
 {
 private Date datahora;
 	
 	
 	private Integer id;
 	private Date datahora;
 	public Date getDatahora() {
 		return datahora;
 	}
 	public void setDatahora(Date datahora) {
 		this.datahora = datahora;
 	}
 	public Integer getId() {
 		return id;
 	}
 	public void setId(Integer id) {
 		this.id = id;
 	}
 	
 	
 }

Fiz um DAO generico onde:
Code:

public List<DadosM> listaM(DadosM met)
 	{
 		Query q =this.session.createQuery("SELECT m FROM dadosm as m WHERE m.id = :id and m.datahora=:datahora");
 		
 		q.setParameter("id",met.getId());
 		q.setParameter("datahora", met.getDatahora());
 		
 		return q.list();
 		
 	}

Minha Logica:
Code:

package br.com.dado.logic;
 
 import java.util.List;
 
 import org.vraptor.annotations.Component;
 import org.vraptor.annotations.InterceptedBy;
 import br.com.pcd.bean.DadosM
 import br.com.pcd.dao.DaoFactory;
 import br.com.pcd.interator.DaoInterceptor;
 
 
 @Component
 @InterceptedBy(DaoInterceptor.class)
 public class DadoMLogic 
 {
 
 	private final DaoFactory daoFactory;
 	private List<DadosM> estacoesM;
 	
 	public DadoMLogic  (DaoFactory daoFactory)
 	{
 		this.daoFactory =daoFactory;
 	}
 		
 	public void formulario()
 	{
 		
 	}
 	
 	public void listatudo(DadosM m)
 	{
 		this.estacoesM=this.daoFactory.getDadosMDao().listaM(m);
 	}
 	
 
 }

crie na pasta web/dadosm/formulario.ok.jsp e o listatudo.ok.jsp

no formulario

Code:

<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
 <title></title>
 </head>
 <body>
 <form method="POST" action="dadosm.listatudo.logic">
    <p>ID <input type="text" name="dadosm.id" size="20">  DATAHORA(yyyy-mm-dd 
   hh:mm:ss) <u><input type="text" name="dadosm.datahora" size="20"></u></p>
   <p> </p>
   <p><input type="submit" value="Buscar" name="B1"></p>
 </form>
 </body>
 </html>

O erro eh o seguinte:

quando vou rodar http://localhost:8080/teste/dadosm.formulario.logic

Code:

21:00:34,484  WARN RootClass:210 - composite-id class does not override equals(): br.com.pcd.bean.MeteorologicaPK
 21:00:34,500  WARN RootClass:215 - composite-id class does not override hashCode(): br.com.pcd.bean.MeteorologicaPK
 21:01:07,796 ERROR LocaleCalendarDateConverter:47 - Unable to parse string 2007-03-10
 java.text.ParseException: Unparseable date: "2007-03-10"
 	at java.text.DateFormat.parse(Unknown Source)
 	at org.vraptor.converter.basic.LocaleCalendarDateConverter.convert(LocaleCalendarDateConverter.java:38)
 	at org.vraptor.converter.SimpleConverterManager.convert(SimpleConverterManager.java:62)
 	at org.vraptor.reflection.JPathExecutor.convert(JPathExecutor.java:215)
 	at org.vraptor.reflection.JPathExecutor.internalSet(JPathExecutor.java:195)
 	at org.vraptor.reflection.JPathExecutor.set(JPathExecutor.java:102)
 	at org.vraptor.introspector.BasicIntrospector.readParameters(BasicIntrospector.java:76)
 	at org.vraptor.core.ConversionEngine.convert(ConversionEngine.java:19)
 	at org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:108)
 	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:82)
 	at org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:45)
 	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:82)
 	at org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:56)
 	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:82)
 	at br.com.pcd.interator.DaoInterceptor.intercept(DaoInterceptor.java:21)
 	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:82)
 	at org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:57)
 	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:82)
 	at org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:91)
 	at org.vraptor.core.VRaptorController.execute(VRaptorController.java:39)
 	at org.vraptor.VRaptorServlet.service(VRaptorServlet.java:57)
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
 	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
 	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
 	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
 	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 	at java.lang.Thread.run(Unknown Source)

O que pode ser???

O formato da DATA eh yyyy-mm-dd hh:mm:ss

OBS: esse exemplo nao fiz pegando 2 datas… com 2 datas coloquei como String e defini na minha LOGIC e funcionou…

L

Ok.

public List&lt;DadosM&gt; listaM(DadosM met, Date dataInicial, Date dataFinal)
  	{
  		Query q =this.session.createQuery("SELECT m FROM dadosm as m WHERE m.id = :id and m.datahora between :dataInicial and :dataFinal");
  		
  		q.setParameter("id",met.getId());
  		q.setParameter("dataInicial", dataInicial);
  		q.setParameter("dataFinal", dataFinal);
  		
  		return q.list();
  		
  	}
package br.com.dado.logic;
  
  import java.util.List;
  
  import org.vraptor.annotations.Component;
  import org.vraptor.annotations.InterceptedBy;
  import br.com.pcd.bean.DadosM
  import br.com.pcd.dao.DaoFactory;
  import br.com.pcd.interator.DaoInterceptor;
  
  
  @Component
  @InterceptedBy(DaoInterceptor.class)
  public class DadoMLogic 
  {
  
  	private final DaoFactory daoFactory;
  	private List&lt;DadosM&gt; estacoesM;
  	
  	public DadoMLogic  (DaoFactory daoFactory)
  	{
  		this.daoFactory =daoFactory;
  	}
  		
  	public void formulario()
  	{
  		
  	}
  	
  	public void listatudo(DadosM m, Date dataInicial, Date dataFinal)
  	{
  		this.estacoesM=this.daoFactory.getDadosMDao().listaM(m, dataInicial, dataFinal);
  	}
  	
  
  }

Para a pesquisa com as duas datas:

&lt;%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %&gt;
  &lt;html&gt;
  &lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/&gt;
  &lt;title&gt;&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;form method="POST" action="dadosm.listatudo.logic"&gt;
     <p>ID &lt;input type="text" name="dadosm.id" size="20"&gt;  
     DATA INICIAL (yyyy-mm-dd hh:mm:ss) 
    <u>&lt;input type="text" name="dataInicial" size="20"&gt;</u>
     DATA FINAL (yyyy-mm-dd hh:mm:ss) 
    <u>&lt;input type="text" name="dataFinal" size="20"&gt;</u></p>

    <p> </p>
    <p>&lt;input type="submit" value="Buscar" name="B1"&gt;</p>
  &lt;/form&gt;
  &lt;/body&gt;
  &lt;/html&gt;
A

Ola Lucas…
Entao… nao deu erro dessa vez porem nao lista nada pq a data esta vindo ± nesse formato:
Mon 12 Abr07
e o formato que preciso eh yyyy-mm-dd hh para passar para o banco…

:smiley:
Thanks :wink:

Criado 11 de abril de 2007
Ultima resposta 13 de abr. de 2007
Respostas 15
Participantes 3