samara
Dezembro 4, 2007, 5:08pm
#1
Olá pessoal… queria saber como passo um String[] como parametro para o iReport. Tentei fazer usando for mas não deu certo =/
Assim:
Map parametros = new HashMap();
for(int i=0; i < vlParametro.length; i++)
{
parametros.put("programa", vlParametro[i]);
parametros.put("situacao", vlParametro[i]);
}
Ah! Obtenho o string assim:
String[] vlParametro = request.getParameterValues("clientes");
Alguém pode me ajudar?
jjose
Dezembro 4, 2007, 5:21pm
#2
vc deve passar a string
[code]String [] y = new String…;
String [] x = y;[/code]
isso pq ela espera um array e não uma string, o for soh daria se esperasse String e nao array
samara
Dezembro 6, 2007, 9:12am
#3
oi jjose, e eu não tou passando a string? se é que sua resposta fala pra q eu passe a string…
LPJava
Dezembro 6, 2007, 9:15am
#4
mas ta dando qual erro? pode colocar?
samara
Dezembro 6, 2007, 9:57am
#5
Opa, o erro que tá dando é que não aparece a informação correta quando gera os relatorios… tipo… eu consigo pegar os parametros certos, mas quando passo eles… gera a informação errada. Já testei nos relatorios [forçando valores, só pra ver se vai] e dá certo sim. Ai qndo passo o string [dentro do for] como parametro, ele só gera informação errada… vou colocar o código aqui…
package estudo;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.design.JRJdtCompiler;
import net.sf.jasperreports.engine.design.JasperDesign;
public class geraRelatorio extends HttpServlet{
private static Connection getConnection( ) throws ClassNotFoundException, SQLException{
//faço a conexão com o banco.
}
public void doPost (HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String[] vlParametro = request.getParameterValues("clientes");
// obtém a conexão com o banco de dados
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = getConnection();
} catch (Exception e) {
System.out.println("Erro ao obter conexao via DriverManager: " + e.getMessage());
}
// gera o relatório
ServletContext context = getServletContext();
byte[] bytes = null;
try {
// carrega os arquivos jasper
// JasperReport compiledReport = (JasperReport)JRLoader.loadObject(
// context.getRealPath("\web\relatorioNomeAlunos.jasper"));
java.io.File jrxmlFile = new java.io.File("F:\Documents and Settings\Samara\Meus documentos\CódigoNTI\TestePRPG\web\TesteOra.jrxml");
JasperDesign design = net.sf.jasperreports.engine.xml.JRXmlLoader.load(jrxmlFile);
JRJdtCompiler comp = new JRJdtCompiler();
JasperReport compiledReport = comp.compileReport(design);
// parâmetros, se houverem
Map parametros = new HashMap();
for(int i=0; i < vlParametro.length; i++){
parametros.put("programa", vlParametro[i]);
parametros.put("situacao", vlParametro[i]);
}
// direciona a saÃda do relatório para um stream
bytes = JasperRunManager.runReportToPdf(compiledReport,parametros,con);
} catch (JRException e) {
e.printStackTrace();
}
if (bytes != null && bytes.length > 0) {
// envia o relatório em formato PDF para o browser
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
}
}
samara
Dezembro 6, 2007, 10:24am
#6
Ele gera um relatorio que num deve gerar… eu fiz o teste do for pra aparecer ele impresso aqui e apareceu assim:
Programa: 22 Programa:2
Situacao: 22 Situacao: 2
E deveria ser assim, pra dar certo:
Programa: 22
Situacao: 2
Acho que você queria fazer algo assim:
parametros.put("programa", vlParametro[0]);
parametros.put("situacao", vlParametro[1]);
samara
Dezembro 6, 2007, 12:46pm
#8
Kramba… deu certo… nem acredito…
Valeu pessoal!
Ele esta gerando apenas a ultima ?!
for(int i=0; i < vlParametro.length; i++){
parametros.put("programa", vlParametro[i]);
parametros.put("situacao", vlParametro[i]);
}
Não, na sua lógica, você fala que o valor do programa é o mesmo da situação pois eles pegam os mesmos valores do vlParametro
for(int i=0; i < vlParametro.length; i++){
parametros.put("programa", vlParametro[i]);
parametros.put("situacao", vlParametro[i]);
}