Erro ao chamar relatório com JSF

4 respostas
W

Olá Pessoal, meu problema é o seguinte, sou iniciante em ireport, a versão que estou usando é a 3.7 com JSF 1.2 e JPA - ja olhei os posts no forum mas não consegui resolver o problema. Vamos ao problema, tenho uma busca de uns agendamentos realizados que tem a opção de buscar por data, isso já esta funcionando, criei um link "Gerar relatorio" que chama o metodo para gerar o relatório onde tenho a intenção de gerar o relatório pela data selecionada na busca dos agendamentos, mas da dando erro, poderiam me ajudar?

Meu código java:

//método para a consulta a ser utilizada
    private String consultaComprados(){
		String query = "SELECT a.paciente, a.procedimento, a.medico, a.convenio, a.statusCor, a.observacao " +
		" FROM  AgendaCirurgica a" +
		" WHERE a.sala <> 2 AND a.dtCirurgia :dtCirurgia" +
		" GROUP By a.sala, a.dtCirurgia";
		return query;
    }    
    
    private List<?> todosResultsPesq(){
	Map<String, Object> params = new HashMap<String, Object>();
	params.put("dtCirurgia", new Timestamp(dtCirurgia.getTime()));	

	return agendaCirurgicaDao.listPesqParam(consultaComprados(),params);
	
}    

    @SuppressWarnings("unchecked")
    // executa o relatório através do actionListener
    public void executarRelatorio(ActionEvent action) throws ParseException {

	FacesContext context = FacesContext.getCurrentInstance();
	HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

	// pega o caminho do arquivo .jasper da aplicação
	InputStream reportStream = context.getExternalContext().getResourceAsStream(
		"/relatorios/agendaBlocoCirurgico.jasper");

	// envia a resposta com o MIME Type PDF
	response.setContentType("application/pdf");
	/*
	 * força a abertura de download
	 * response.setHeader("Content-disposition",
	 * "attachment;filename=relatorio.pdf");
	 */

	try {
	    ServletOutputStream servletOutputStream = response.getOutputStream();

	    // envia o título para o relatório, usando o parâmetro criado
	     Map<String, String> parametros = new HashMap<String, String>();
	     parametros.put("TITULO",
	     "Relatório - Agenda do Bloco Cirúrgico");

	    List dados = new ArrayList();

	    Map record = null;

		 //varre a consulta e separa os objetos 
		 for (Iterator iterator = todosResultsPesq().iterator(); 
		 		iterator.hasNext();) {

		Object[] o = (Object[]) iterator.next();
		record = new HashMap();
		// coloca em um Map cada um dos campos criados
		// manualmente pelo relatório
		record.put("paciente", o[0].toString());
		record.put("procedimento", o[1].toString());
		record.put("medico", o[2].toString());
		record.put("convenio", o[3].toString());
		record.put("statusCor", o[4].toString());
		record.put("observacao", o[5].toString());

		// adiciona o List dados
		dados.add(record);

	    }

	    // cria uma fonte de dados para coleções
	    JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(dados);

	    // envia para o navegador o PDF gerado
	    JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null, fonteDados);

	    servletOutputStream.flush();
	    servletOutputStream.close();

	} catch (JRException e) {
	    e.printStackTrace();
	} catch (IOException e) {
	    e.printStackTrace();
	} finally {
	    // evita erro do JSF após completar
	    // a geração do relatório
	    // avisando o FacesContext que a resposta está completa
	    context.responseComplete();

	}
    }

Minha pagina:

Erro::>>>>>>>

09:09:41,146 ERROR PARSER:33 - line 1:171: unexpected token: :
02/12/2010 09:09:41 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: Received 'java.lang.IllegalArgumentException' when invoking action listener '#{agendaCirurgicaController.executarRelatorio}' for component 'j_id107'
02/12/2010 09:09:41 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: : near line 1, column 171 [SELECT a.paciente, a.procedimento, a.medico, a.convenio, a.statusCor, a.observacao  FROM  br.com.scp.intranet.modelo.AgendaCirurgica a WHERE a.sala <> 2 AND a.dtCirurgia :dtCirurgia GROUP By a.sala, a.dtCirurgia]
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:624)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)
	at sun.reflect.GeneratedMethodAccessor57.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358)
	at $Proxy70.createQuery(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor57.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:198)
	at $Proxy24.createQuery(Unknown Source)
	at br.com.tw.daogenerico.imp.DaoGenericoImp.listPesqParam(DaoGenericoImp.java:98)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy65.listPesqParam(Unknown Source)
	at br.com.scp.intranet.controller.AgendaCirurgicaController.todosResultsPesq(AgendaCirurgicaController.java:529)
	at br.com.scp.intranet.controller.AgendaCirurgicaController.executarRelatorio(AgendaCirurgicaController.java:565)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

4 Respostas

R

A exceção que tá dando é da query:

SEVERE: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException

Vc consegue pegar a query gerada e executar no banco?

W

Sim por meio do retorno -

return agendaCirurgicaDao.listPesqParam(consultaComprados(),params);

Depois faço a varredura e separa o objeto

[code]# //varre a consulta e separa os objetos
# for (Iterator iterator = todosResultsPesq().iterator();
# iterator.hasNext();) {
[quote]

W

Preciso gerar um relátorio usando uma consulta do meu Bean no Ireport - alguem tem uma abordangem diferente da minha, de como faria isso?. Agluem tem um codigo exemplo de como chamaria o relatório em pdf. em minha página. Minha aplicação é JSF 1.2 - JPA - Spring

W

Pessoal o erro é esse agora

<blockquote>

03/12/2010 08:29:38 javax.faces.event.MethodExpressionActionListener processAction

SEVERE: Received ‘java.lang.ClassCastException’ when invoking action listener ‘#{agendaCirurgicaController.executarRelatorio}’ for component ‘j_id107’

03/12/2010 08:29:38 javax.faces.event.MethodExpressionActionListener processAction

SEVERE: java.lang.ClassCastException: br.com.scp.intranet.modelo.AgendaCirurgica cannot be cast to [Ljava.lang.Object;

at br.com.scp.intranet.controller.AgendaCirurgicaController.executarRelatorio(AgendaCirurgicaController.java:767)</blockquote>
Criado 2 de dezembro de 2010
Ultima resposta 3 de dez. de 2010
Respostas 4
Participantes 2