Variáveis de um formulário

11 respostas
H

Olá pessoal…

Estou com dificuldades de montar um formulário em pdf, pois não consigo colocar as variáveis da minha página form.jsp no meu DataSource…

Estou usando Struts, então quando o usuário preenche o formulário e clica enviar, é preenchido um ActionForm, o qual possui um método toList() que pega os valores todos e joga numa List para ser usado no construtor do DataSource…
Mas quando é executado, ele dá um erro de ClassException no método next() do meu DataSource, justamente ness linha:

boolean result = false;
		try {
			if (listVO.hasNext()) {
                        // linha do erro:
				objectVO = (SolicitaAutorizacaoVO) listVO.next();
				result = true;
			} else {
				result = false;
			}
		} catch (Exception e) {
			System.out.println(e);
			result = false;
		}

Como poderia estar fazendo para não obter esse erro novamente e conseguir popular meu formulário com o JasperReport?

11 Respostas

maquiavelbona

Bom dia!

Terias como você publicar um pouco mais do código e da stacktrace?

Até!

H

a classe DataSource:

package br.com.cabesp.commons.dao;

import java.util.Iterator;
import java.util.List;

import br.com.cabesp.autorizacao.vo.SolicitaAutorizacaoVO;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

public class SolicitaAutorizacaoDataSource implements JRDataSource {

	// VO do Formulario de reembolso .
	private SolicitaAutorizacaoVO objectVO;

	private Iterator listVO;

	public SolicitaAutorizacaoDataSource(List list) {
		listVO = list.iterator();
	}

	public boolean next() throws JRException {
		boolean result = false;
		try {
			if (listVO.hasNext()) {
				objectVO = (SolicitaAutorizacaoVO) listVO.next();
				result = true;
			} else {
				result = false;
			}
		} catch (Exception e) {
			System.out.println(e);
			result = false;
		}
		return result;
	}

	public Object getFieldValue(JRField jrField) {
		Object valor = null;
		if (jrField.getName().equalsIgnoreCase("nomePaciente")) { 
			valor = objectVO.getNomePaciente();
		} else if (jrField.getName().equalsIgnoreCase("nomeSolicitante")) {
			valor = objectVO.getNomeSolicitante();
		}
		return valor;
	}

}

A action que controla os fluxos:

package br.com.cabesp.autorizacao.action;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import br.com.cabesp.autorizacao.vo.SolicitaAutorizacaoVO;
import br.com.cabesp.commons.dao.SolicitaAutorizacaoDataSource;
import br.com.cabesp.login.LoginUtil;

public class SolicitaAutorizacaoAction extends DispatchAction {
	
	/**
	 * Formulário para autorizações médicas do prestador.
	 */
	public ActionForward formulario(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ActionForward act = LoginUtil.checkLogin(mapping, request, response);
		if (act != null) {
			return act;
		}
		
		return mapping.findForward("formulario");
	}
	
	/**
	 * Processo de envio do formulário de autorizações médicas do prestador.
	 */
	public ActionForward enviar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ActionForward act = LoginUtil.checkLogin(mapping, request, response);
		if (act != null) {
			return act;
		}		
		SolicitaAutorizacaoForm dadosAutoriz = (SolicitaAutorizacaoForm) form;
		
		List lista = new ArrayList();
		
		lista = dadosAutoriz.toList();
	    
	    response.setContentType("application/pdf");
	    
		Map map = new HashMap();
		
		map.put("logoCabesp", getServlet().getServletContext().getRealPath("/images/LOGOplanofamilia-pb.jpg"));
		
		map.put("logoans",getServlet().getServletContext().getRealPath("/images/cabesp_ans.jpg"));
		
		String sFile = getServlet().getServletContext().getRealPath("/WEB-INF/classes/solicitaAutorizacao.jasper");
		
		File file = new File(sFile);
		
		SolicitaAutorizacaoDataSource ds = new SolicitaAutorizacaoDataSource(lista);
		
		JasperPrint print = JasperFillManager.fillReport(new FileInputStream(file), map, ds);
		
		BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
		
		JasperExportManager.exportReportToPdfStream(print, bos);
		
		return mapping.findForward(null);
	}

}

O método dadosAutoriz.toList();

public List toList() {
		List lista = new ArrayList();
		lista.add(nomePaciente);
		lista.add(codigoCabespPaciente);
		lista.add(nomeSolicitante);
		lista.add(codigoCabespSolicitante);
		lista.add(nomePrestador);
		lista.add(codigoCabespPrestador);
		lista.add(nomeLocal);
		lista.add(codigoCabespLocal);
		lista.add(relatorioTecnico);
		lista.add(firstCodigoProcedimento);
		lista.add(secondCodigoProcedimento);
		lista.add(thirdCodigoProcedimento);
		lista.add(fourthCodigoProcedimento);
		lista.add(firstQuantidadeProcedimento);
		lista.add(secondQuantidadeProcedimento);
		lista.add(thirdQuantidadeProcedimento);
		lista.add(fourthQuantidadeProcedimento);
		lista.add(firstDescricaoProcedimento);
		lista.add(secondDescricaoProcedimento);
		lista.add(thirdDescricaoProcedimento);
		lista.add(fourthDescricaoProcedimento);
		lista.add(firstQuantidadeMaterial);
		lista.add(secondQuantidadeMaterial);
		lista.add(thirdQuantidadeMaterial);
		lista.add(fourthQuantidadeMaterial);
		lista.add(fifthQuantidadeMaterial);
		lista.add(sixthQuantidadeMaterial);
		lista.add(firstDescricaoMaterial);
		lista.add(secondDescricaoMaterial);
		lista.add(thirdDescricaoMaterial);
		lista.add(fourthDescricaoMaterial);
		lista.add(fifthDescricaoMaterial);
		lista.add(sixthDescricaoMaterial);
		lista.add(firstMarcaMaterial);
		lista.add(secondMarcaMaterial);
		lista.add(thirdMarcaMaterial);
		lista.add(fourthMarcaMaterial);
		lista.add(fifthMarcaMaterial);
		lista.add(sixthMarcaMaterial);
		lista.add(firstModeloMaterial);
		lista.add(secondModeloMaterial);
		lista.add(thirdModeloMaterial);
		lista.add(fourthModeloMaterial);
		lista.add(fifthModeloMaterial);
		lista.add(sixthModeloMaterial);
		lista.add(firstValorMaterial);
		lista.add(secondValorMaterial);
		lista.add(thirdValorMaterial);
		lista.add(fourthValorMaterial);
		lista.add(fifthValorMaterial);
		lista.add(sixthValorMaterial);
		lista.add(regimeAtendimento);
		lista.add(dataPrevista);
		lista.add(tipoAquisicao);
		lista.add(radioCabesp);
		lista.add(tipoAquisicaoEndereco);
		lista.add(tipoAquisicaoBairro);
		lista.add(tipoAquisicaoCidade);
		lista.add(tipoAquisicaoUF);
		lista.add(tipoAquisicaoCEP);
		lista.add(tipoAquisicaoA_C);
		lista.add(respostaFax);
		lista.add(respostaFone);
		lista.add(respostaEmail);
		lista.add(telefoneContato);
		
		return lista;
	}

E o erro:

StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
javax.servlet.ServletException
	at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
	at java.lang.Thread.run(Thread.java:595)
----- Root Cause -----
java.lang.NullPointerException
	at br.com.cabesp.commons.dao.SolicitaAutorizacaoDataSource.<init>(SolicitaAutorizacaoDataSource.java:21)
	at br.com.cabesp.autorizacao.action.SolicitaAutorizacaoAction.enviar(SolicitaAutorizacaoAction.java:73)
	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:585)
	at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
	at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
	at java.lang.Thread.run(Thread.java:595)
maquiavelbona

Opa!

Terias como verificar se listaVO é nulo? Creio que o problema seja ou quando populas o objeto ou quando envias para retirar os valores para complementar seu pdf.

Até!

H

Apesar de serem todas variáveis globais, eu inicializei todas elas com um valor em branco, já para não ter problemas com NullPointerException, mas parece que não adiantou?..

O que será que falta aqui???

maquiavelbona

Certo,

consegues me garantir que ele não está caindo no catch do método next e nem retornando objeto nulo no getFieldValue?

Até!

GraveDigger

Cara, vc está criando a List

private Iterator listVO;

Mas onde vc está INICIALIZANDO a list?

maquiavelbona

Opa!

Em tese está sendo inicializado no construtor

public SolicitaAutorizacaoDataSource(List list) { listVO = list.iterator(); }

H

Essa List é inicializada no construtor:

public SolicitaAutorizacaoDataSource(List list) {
		listVO = list.iterator();
	}

o erro acontece no método next do DataSource:

public boolean next() throws JRException {
		boolean result = false;
		try {
			if (listVO.hasNext()) {
				objectVO = (SolicitaAutorizacaoVO) listVO.next();
				result = true;
			} else {
				result = false;
			}
		} catch (Exception e) {
			System.out.println(e);
			result = false;
		}
		return result;
	}

Ele vai fazer o cast do Value Object SolicitaAutorizacaoVO e dispara o erro
ClassCastException…

O que tem de errado?
Outros módulos funcionam essa lógica, com busca no BD, mas esse que tem os dados vindo da página não dá certo!!!

maquiavelbona

Será que você não está retornando coisas erradas?
Quando você cria a lista, você a popula com objetos tipo:

lista.add(fourthCodigoProcedimento);

e não com objeto do tipo SolicitaAutorizacaoVO.
Verifique isso colocando esse trecho de código só para garantir:

if (listVO.hasNext()) { Object temp = listVO.next(); System.out.println("A classe é "+ temp.getClass()); objectVO = (SolicitaAutorizacaoVO) temp; result = true; }
E veja se realmente se é o tipo que queres.

Até!

H

Vc acertou em cheio…

Este trecho de código esta tentando fazer um Cast de um String para o Value Object…

Bem, ok, descoberto, mas onde eu concerto esse problema, ou seja, onde eu passei os parâmetros errado?

Alguma dica?

maquiavelbona

Poderias mudar o método toList() para toSolicitaAutorizacaoVO() e ao invés de popular um list, preencha o VO de acordo com os dados e farias algo assim:

public SolicitaAutorizacaoDataSource(SolicitaAutorizacaoVO vo) {
	objetoVOtemp = vo;
}
public boolean next() throws JRException {
 		boolean result = false;
 		try {
 			if (objetoVOtemp!=null) {
 				objectVO = (SolicitaAutorizacaoVO) objetoVOtemp;
 				result = true;
 			} else {
 				result = false;
 			}
 		} catch (Exception e) {
 			System.out.println(e);
 			result = false;
 		}
 		return result;
 	}

No toSolicitaAutorizacaoVO(), algo assim:

public SolicitaAutorizacaoVO toSolicitaAutorizacaoVO(){ SolicitaAutorizacaoVO vo = new SolicitaAutorizacaoVO(); vo.setQuartoCodigoProcedimento(fourthCodigoProcedimento); ... return vo; }

Se tiver algum erro de escrita, não ligue, estou fazendo de cabeça.

Até!

Criado 16 de outubro de 2006
Ultima resposta 16 de out. de 2006
Respostas 11
Participantes 3