Como passar um Vector como parametro na banda "DETAIL" no JasperReports?[NAO RESOLVIDO]

Eai galera,

Como faço para passar um vector como parametro no Jasper?
Eu não quero criar um relatorio passando parametros, para que seja executado uma consulta e preencha o campo DETAILS.
Eu simplesmente quero preencher o campo “DETAILS” com dados de um Vector.

ex. [1,rafael;2,rodrigo;3,paula]

No meu relatorio eu tenho cod e nome como campos em DETAILS do tipo java.lang.String. Preciso que seja colocado cada nó do vetor em uma linha!

ex. cod: 1 nome: rafael cod: 2 nome: rodrigo cod: 3 nome: paula

Vlws

Axo q eh isso

        // cria vetor de assiaciados 
        Vector VetiqU= new Vector();


        // passa para o vetor uma collection q retorna do DAO
        VetiqU = daoG.listarSemWhere(EtiqUUni, 1);


        // a classe HashMap  usada para armazenar valores com
        // o formato chave/valor
        HashMap parametros = new HashMap();
        parametros.put(1, nomeDest);
        parametros.put(2, aosC);
        parametros.put(3, end);
        parametros.put(4, comple);
        parametros.put(5, cep);
        parametros.put(6, cidade);
        parametros.put(7, uF);

            // preenche o relatorio com os dados do BD(ou no)
            JasperPrint jp = JasperFillManager.fillReport(jr, parametros, new JRBeanCollectionDataSource(VetiqU));

so q o ideal eh usar um ArrayList no lugar de vector
espero q te ajude t+

Nossa viajei um pouco…como eu inicializo este DAO(daoG)? Na questão do ArrayList…se for melhor OK…eu crio um!! Passo os valores do meu Vector para um ArrayList!!

Vamos supor que agora eu tenha um:

ArrayList listapessoas = new ArrayList();

Minha duvida é com relação no “parametros.put” eu passo a Lista ou crio um for para passar parametro por parametro?

Vamos supor que agora eu tenha:

listapessoas[0] = 1 listapessoas[1] = rafael listapessoas[2] = 2 listapessoas[3] = rodrigo listapessoas[4] = 3 listapessoas[5] = paula

:?

hammm ok O daoG eh um instancia da classe DaoGenerico q criei certo !!! vc tera q chamar a sua consulta
para preencher o ArrayList certo por ex:

        ArrayList listapessoas = new ArrayList();
        listapessoas = SeuDao.listar();

em relacao ao ArrayList ser melhor q o Vector veja este post;

http://www.guj.com.br/posts/list/87920.java#470366

Use o “put” pois ele: Associates the specified value with the specified key in this map;
ele vai servir para identificar os filds do seu relatorio.jrxml.
La no relatorio os campos q tu quer q seja preenchiso com os dados do ArrayList tu coloca como $F{SeuField} ok para preencher o relatorio use:

            // preenche o relatorio com os dados Do ArrayList preenchido pela consulta ao BD
            JasperPrint jp = JasperFillManager.fillReport(jr, parametros, new JRBeanCollectionDataSource(SEUARRAYLIST));

essas sao as linhas q preecenche e visualizam meu relatorio

try {
     // compila o relatorio(arquivo XML)//
     JasperReport jr = JasperCompileManager.compileReport("C:/SRPC/src/relatorios/revistas/etiquetaDestinatarios.jrxml");
    // preenche o relatorio com os dados do BC(ou no)
       JasperPrint jp = JasperFillManager.fillReport(jr, parametros, new JRBeanCollectionDataSource(VetiqU));

   // gera a visualizacao(preview) do relatorio
       JasperViewer jv = new JasperViewer(jp);

   //este metodo visualiza o relatorio...e qndo fechar o relatorio nao fecha a aplicacao
      JasperViewer.viewReport(jp, false);

      } catch (Exception ex) {
           System.out.println("Afffffffff ta dando bug nesse Relatorio !!!!!!!!!!!!");
           ex.printStackTrace();
}

T+

Vlw robson, mas acho q eu coloquei o problema de forma errada.

Vamos supor q eu tenha uma servlet q gere um relatorio…

[code]String mproject = request.getParameter("mproject");
String versionr = request.getParameter("versionr");
String versionb = request.getParameter("versionb");
String formato = request.getParameter("type");

    Connection c = ConectaBD.getconection();
     ServletContext context = getServletContext();
    String rel=null;
    try
    {   
        JasperReport relatorioJasper = JasperCompileManager.compileReport(System.getenv("CATALINA_HOME")+"/webapps/REPORT_SR1/WEB-INF/reports/Report_SR1.jrxml");  
        
        Map parametros = new HashMap();
        parametros.put("pageRoot",context.getRealPath("/"));
        parametros.put("mproject",mproject);
        parametros.put("versionr",versionr);
        parametros.put("versionb",versionb);
        
      
        
        if(formato.equals("pdf"))
        {
            //criando o pdf
            byte[] bytes = null;
            bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,c);
            if(bytes != null && bytes.length > 0)
            {
             //envia o relatorio em pdf para o browser
                response.setContentType("application/pdf");
                response.setContentLength(bytes.length);
                ServletOutputStream outputStream = response.getOutputStream();
                outputStream.write(bytes,0,bytes.length);
                outputStream.flush();
                outputStream.close();
             }
                else
                {
                                    response.setContentType("text/html");
				java.io.PrintWriter out = response.getWriter();
				out.println("<html>");
				out.println("<head>");
				out.println("<title>PDF Fail</title>");
                                    out.println("&lt;body&gt;<br><br><p ><font  rgb(0, 0, 0) size=+2>PDF Fail</font><br>");
                                    out.println("&lt;/head&gt;");
				out.println("&lt;/html&gt;");
                }
   
          }//if pdf

        }//try
        catch(Exception e)
		{
			e.printStackTrace();
			throw new ServletException(e);
		} [/code]

Dentro do relatorio eu tenho uma query que recebe a conexão e os valores e retorna os valores no DETAILS do relatorio.

&lt;queryString&gt;&lt;![CDATA[select p.proj, p.ds, max(a.ef), max(b.ef), to_char(max(a.ef),'J')-to_char(max(b.ef),'J'), round((to_char(max(a.ef), 'J') - to_char(max(b.ef),'J')) / decode((to_char(max(b.ef),'J') - to_char(min(b.es),'J')),0,1,(to_char(max(b.ef),'J') - to_char(min(b.es),'J'))) * 100, 0), decode(count(a.asd), 0, 'NO INICIADO', decode(count(a.afd)-count(a.act), 0, 'FINALIZADO', 'EN CURSO')) from av_activity a, av_activity b, av_project p, av_mpmembers m where a.proj = b.proj and a.act = b.act and a.ver = $P{versionr} and b.ver = $P{versionb} and a.proj = p.proj and b.proj = p.proj and m.proj = p.proj and m.mp = $P{mproject} group by p.proj,p.ds]]&gt;&lt;/queryString&gt;

No meu caso eu não tenho nenhuma query dentro do meu relatorio…portanto não uso conexão!!
Eu preciso passar a lista de valores que será populada em DETAILS diretamente!

No campo Detail do meu relatorio eu tenho:

&lt;detail&gt; &lt;band height="22" isSplitAllowed="true" &gt; &lt;textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" &gt; &lt;reportElement x="74" y="6" width="124" height="13" key="textField-8"/&gt; &lt;box&gt;&lt;/box&gt; &lt;textElement rotation="None"&gt; <font /> &lt;/textElement&gt; &lt;textFieldExpression class="java.lang.String"&gt;&lt;![CDATA[$P{nomeF}]]&gt;&lt;/textFieldExpression&gt; &lt;/textField&gt; &lt;textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" &gt; &lt;reportElement x="198" y="6" width="124" height="13" key="textField-9"/&gt; &lt;box&gt;&lt;/box&gt; &lt;textElement rotation="None"&gt; <font /> &lt;/textElement&gt; &lt;textFieldExpression class="java.lang.String"&gt;&lt;![CDATA[$P{nomeCC}]]&gt;&lt;/textFieldExpression&gt; &lt;/textField&gt; &lt;textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" &gt; &lt;reportElement x="676" y="6" width="74" height="13" key="textField-10"/&gt; &lt;box&gt;&lt;/box&gt; &lt;textElement textAlignment="Right" rotation="None"&gt; <font /> &lt;/textElement&gt; &lt;textFieldExpression class="java.lang.String"&gt;&lt;![CDATA[$P{valorNF}]]&gt;&lt;/textFieldExpression&gt; &lt;/textField&gt; &lt;/band&gt; &lt;/detail&gt;

Estes $P{nomeF}, $P{nomeCC} e $P{valorNF} que eu quero completar com os valores que estao em minha lista (diretamente)!

Vlw Robson

hamm Raarm puts li de, novo agora q fui entender hehehheheh
o exemplo q te mostrei era pra desktop foi mal…
to procurando um post aki de um colega meu q estava com mesmo problema…
assim q axar te mando ok T+ Valew

Alguem tem alguma idéia? Robson vc achou o post do seu amigo? :roll:

VLW

A questão é como mandar um arraylist ou vector no lugar de dados de um db?

:?

Incrivel mas ainda estou com este problema…Alguem tem alguma solução? :?

Vlw galera