[RESOLVIDO]HELP! com o List + Session

6 respostas
K

Galera o meu problema e o seguinte…
Estou fazendo um relatorio no iReport…ate ai tranquilo, fiz o relatorio e executei por ele la e deu tudo certo…

Mas qdo coloquei na minha aplicação web não funcionou…o cenario e o seguinte…

Tenho 2 campos no relatorio um do tipo Date e outro do tipo Integer. ai eu eu jogo um select desses campos na sessão e pego eles la no meu Servlet.
e coloco eles numa List…

Mas ai da erro de compilação, pois fala que não pode converter de String para int…
No meu banco esta certo…cada um com o seu tipo…

Eu acho que o problema esta nessa list, sera que ela ta colocando os objetos como se fosse String…se sim como faço pra fazer um List que me retorne o tipo real mesmo de cada objeto???

essa e a classe que executa o relatorio e onde eu faço essa List…o erro da justamente qdo vai passar para a variavel bytes[]

private void execute(ServletContext sc, HttpServletRequest request,
		HttpServletResponse response) throws IOException {

	try {
		List listaReceita = (List) request.getSession().getAttribute("receitas");
		JRDataSource jrds = new JRBeanCollectionDataSource(listaReceita);

		// parametros para o relatorio
		HashMap map = new HashMap();

		// carrega os arquivos jasper
		JasperReport reportFile = (JasperReport) JRLoader.loadObject(sc
				.getRealPath("./relatorios/receita.jasper"));

		byte bytes[] = null;

		try {
			bytes = JasperRunManager.runReportToPdf(reportFile, map, jrds);

		} catch (Exception e) {
			e.printStackTrace();
			return;
		}

		if (bytes != null && bytes.length > 0) {
			response.setContentType("application/pdf");
			response.setContentLength(bytes.length);
			ServletOutputStream ouputStream = response.getOutputStream();
			ouputStream.write(bytes, 0, bytes.length);
			ouputStream.flush();
			ouputStream.close();
		}
	} catch (JRException e) {
		e.printStackTrace();
	}
}

Ai o erro que da e o seguinte:

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

at receita_1247488341484_231658.evaluateEstimated(receita_1247488341484_231658:362)

at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:246)

Alguem me da um Help…to quebrando cabeça ja tem um tempao, e nada… :cry:
Desde ja Agradeço…

Abs.

6 Respostas

T

por favor, utilize as tags [ code] [ /code] para colocar codigos aqui:

private void execute(ServletContext sc, HttpServletRequest request,
HttpServletResponse response) throws IOException {

try {
List listaReceita = (List) request.getSession().getAttribute("receitas");
JRDataSource jrds = new JRBeanCollectionDataSource(listaReceita);

// parametros para o relatorio
HashMap map = new HashMap();

// carrega os arquivos jasper
JasperReport reportFile = (JasperReport) JRLoader.loadObject(sc
.getRealPath("./relatorios/receita.jasper"));

byte bytes[] = null;

try {
bytes = JasperRunManager.runReportToPdf(reportFile, map, jrds);

} catch (Exception e) {
e.printStackTrace();
return;
}

if (bytes != null && bytes.length > 0) {
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
} catch (JRException e) {
e.printStackTrace();
}
}
K

Nossa desculpa…ae, sou nova aki e não sabia…e tbm nem li neh…antes de postar…desculpa…

Vlw a dica…

Mas então alguem ai pode me ajudar?

Metaleiro

[color=darkblue]Provavelmente é nessa hora, os Objetos estão retornando em forma de String ou Object, isso partindo é claro do ponto que todos os dados no .jasper estão corretos.

Eu sugiro que tente “debugar” apenas para verificar o que a list está enviando para o .jasper, as vezes sei que é errado mas costumo converter todos os dados para String e no .jasper deixo tudo como String, faço porque utilizo uns 4 Beans diferentes para compor um relatório[/color]

K

Metaleiro…
e o seguinte o problema e justamente esse, a lista esta enviando como String…

Nao posso converter tudo para string no iReports, pq tenho totalizadores…se converter não posso somar os valores…

Então que converter e a minha lista que pego da sessão com os valores corretos e jogar para outra lista…

Mas e justamente ai que to apanhando…vc sabe me dizer como faço essa conversão?

Metaleiro

[color=darkblue] Primeiro você tem que saber que tipo de list esta usando, se for um ArrayList<k,V> fica mais fácil, você pega simplesmente e percorre o Array através da key e usa algo do tipo para converter e jogar em outro Array :[/color]

int quantidade = Integer.parseInt(quantidade1);  
    double unitario_final = Double.parseDouble(valor);

[color=darkblue] Senão você faz a iteração e joga em um Bean, o bean que você utilzou e faz a mesma coisa colocando em outra list, algo mais ou menos dessa forma, apenas para se basear ou caso alguém tenha uma solução melhor :[/color]

ArrayList lista = new ArrayList();
		lista.add(0,"1");
		lista.add(1,"2");
			
		List list = (List) lista;
		int temp = 0;
		
		for (int i = 0; i &lt; list.size(); i++) {
			if(list.get(i) instanceof String){
				temp = Integer.parseInt(list.get(i).toString());
			};
		}
K

vlw…deu certo aki…brigaduuu

Criado 13 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 6
Participantes 3