Carregar DataTable com Pesquisa

3 respostas
L

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:

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;
	}



}

Página XHTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:p="http://primefaces.org/ui"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head></h:head>
<body>
	<h:form>

		<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>
</html>

StackTrace:

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

3 Respostas

L

Heeeelp! =(

F

Cara, também estou precisando da mesma coisa. Alguma alma caridosa?

asousaj

LucasFalanga faltou o “:” antes de dtFinal na query. Tente assim.

Dava erro nesta linha pois sem o “:” não ere interpretado como um parametro.

Criado 27 de novembro de 2013
Ultima resposta 1 de dez. de 2013
Respostas 3
Participantes 3