Olá Pessoal,
Estou tentando após uma pesquisa, carregar um DataTable abaixo, trazendo os valores da pesquisa.
A página é exibida normalmente, mas quando clico em “Buscar”, aparece um erro.
Estou usando JSF + PrimeFaces + Hibernate com JPA.
Peço desculpas antecipadamente caso esteja violando alguma das regras do fórum. Esse trabalho é para amanhã, estou um pouco ansioso. hehehe
Segue abaixo código do Bean, da página XHTML e o stacktrace.
BEAN:
[code]package forms;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import persistence.JPAResourceBean;
import entities.Aeroporto;
import entities.Voo;
@ManagedBean (name = “VooForm”)
@ViewScoped
public class VooForm {
private Voo voo = new Voo();
private List<Aeroporto> aeroportos;
private List<Voo> trechos;
private boolean tabelaOk = false;
public String cadastrarVoo(Voo voo) {
EntityManager em = JPAResourceBean.getEntityManager();
try {
em.getTransaction().begin();
em.persist(voo);
em.getTransaction().commit();
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
public boolean isTabelaOk() {
return tabelaOk;
}
public void setTabelaOk(boolean tabelaOk) {
this.tabelaOk = tabelaOk;
}
public Voo getVoo() {
return voo;
}
public void setVoo(Voo voo) {
this.voo = voo;
}
public List<Voo> getTrechos() {
Date d = voo.getPartida();
Calendar c = Calendar.getInstance();
c.setTime(d);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
Date d2 = voo.getPartida();
Calendar c2 = Calendar.getInstance();
c2.setTime(d2);
c2.set(Calendar.HOUR_OF_DAY, 23);
c2.set(Calendar.MINUTE, 59);
c2.set(Calendar.SECOND, 59);
EntityManager em = JPAResourceBean.getEntityManager();
String jpql = "select v from Voo v where v.origemID = :localOrigem and v.destinoID = :localDestino and v.partida >= :dtInicio and v.partida <= dtFinal";
Query q = em.createQuery(jpql, Voo.class).
setParameter("dtInicio", c.getTime()).
setParameter("dtFinal", c2.getTime()).
setParameter("localOrigem", voo.getOrigemID()).
setParameter("localDestino", voo.getDestinoID());
this.tabelaOk = true;
return this.trechos = q.getResultList();
}
public List<Aeroporto> getAeroportos() {
EntityManager em = JPAResourceBean.getEntityManager();
Query q = em.createQuery("select a from Aeroporto a", Aeroporto.class);
this.aeroportos = q.getResultList();
em.close();
return aeroportos;
}
public void setAeroportos(List<Aeroporto> aeroportos) {
this.aeroportos = aeroportos;
}
}
[/code]
Página XHTML:
[code]
<h:head></h:head>
<p:panelGrid columns="2">
<f:facet name="header">BUSCAR TRECHO</f:facet>
Origem: <h:selectOneMenu value="#{VooForm.voo.origemID}">
<f:selectItem itemLabel="-- SELECIONE --" noSelectionOption="true"></f:selectItem>
<f:selectItems value="#{VooForm.aeroportos}" var="aero"
itemValue="#{aero.codigo}" itemLabel="#{aero.nome}"></f:selectItems>
</h:selectOneMenu>
Destino: <h:selectOneMenu value="#{VooForm.voo.destinoID}">
<f:selectItem itemLabel="-- SELECIONE --" noSelectionOption="true"></f:selectItem>
<f:selectItems value="#{VooForm.aeroportos}" var="aero"
itemValue="#{aero.codigo}" itemLabel="#{aero.nome}"></f:selectItems>
</h:selectOneMenu>
Data: <p:calendar value="#{VooForm.voo.partida}" id="popupButtonCal" showOn="button" pattern="dd/MM/yyyy" />
<f:facet name=“footer”>
<p:commandButton value=“Buscar” action="#{VooForm.getTrechos}" update=":tabela"></p:commandButton>
</f:facet>
</p:panelGrid>
</h:form>
<p:outputLabel id="tabela">
<p:dataTable value="#{VooForm.trechos}" var="trecho" rendered="#{VooForm.tabelaOk}" >
<p:column headerText="Vôo">
<h:outputText value="#{trecho.codigo}"></h:outputText>
</p:column>
</p:dataTable>
</p:outputLabel>
</body>
[/code]
StackTrace:
[code]Nov 27, 2013 3:50:59 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{VooForm.getTrechos}: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
javax.faces.FacesException: #{VooForm.getTrechos}: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
… 23 more
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:368)
at forms.VooForm.getTrechos(VooForm.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
… 24 more
Caused by: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:101)
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:107)
at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:460)
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:430)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:362)
… 33 more
Nov 27, 2013 3:50:59 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
SEVERE: javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:368)
at forms.VooForm.getTrechos(VooForm.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
… 24 more
Caused by: org.hibernate.QueryParameterException: could not locate named parameter [dtFinal]
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:101)
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:107)
at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:460)
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:430)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:362)
… 33 more[/code]