Take input from an Arraylist to generate report in ireport

Asked

Viewed 1,131 times

0

How can I get the Dice from the list to go to the ireport? I already tried to give a "get" but error. This is my method that generates the report:

 public void gerarRelatorio(ArrayList list) {
    for (int i = 0; i < list.size(); i++) {
        JasperReport report = null;

        try {
            InputStream inputStreamReal = getClass().getResourceAsStream("/br/com/testexml/relatorio/Teste.jrxml");
            report = JasperCompileManager.compileReport(inputStreamReal);

        } catch (JRException ex) {
            Logger.getLogger(TesteView.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(list));
            JasperExportManager.exportReportToPdfFile(print,
                    "C:\\relatorios/RelatorioClientes" + i + ".pdf");

        } catch (JRException ex) {
            Logger.getLogger(TesteView.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Button Event that selects xml:

JFileChooser chooser = new JFileChooser();

    // Possibilita a seleção de vários arquivos
    chooser.setMultiSelectionEnabled(true);

    // Apresenta a caixa de diálogo
    chooser.showOpenDialog(null);

    // Retorna os arquivos selecionados. Este método retorna vazio se
    // o modo de múltipla seleção de arquivos não estiver ativada.
    File[] files = chooser.getSelectedFiles();
    for (File argumento : files) {
        //System.err.println("Argumentos: " + argumento.getPath());
        caminho = argumento.getPath();

        LeitorXMLDOMMelhorado parser = new LeitorXMLDOMMelhorado();

        // lista = new ArrayList();
        try {

            /* List<Cliente> */
            contatos = (List<Cliente>) parser.realizaLeituraXML(caminho);

            for (Cliente contato : contatos) {
               // System.out.println(contato);
                lista.add(contato);
                gerarRelatorio(lista);
            }
            System.out.println("LISTA:"+lista.size());

        } catch (ParserConfigurationException e) {
            System.out.println("O parser não foi configurado corretamente.");
            e.printStackTrace();
        } catch (SAXException e) {
            System.out.println("Problema ao fazer o parse do arquivo.");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("O arquivo não pode ser lido.");
            e.printStackTrace();
        }

    }

Class reading the xml:

public class LeitorXMLDOMMelhorado {


public List<Cliente> realizaLeituraXML(String arquivoXML) throws ParserConfigurationException, SAXException, IOException{
    //fazer o parse do arquivo e criar o documento XML
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(arquivoXML);

    //Passo 1: obter o elemento raiz
    Element raiz = doc.getDocumentElement();
    System.out.println("O elemento raiz é: " + raiz.getNodeName());

    //Passo 2: localizar os elementos filhos da agenda
    NodeList listaContatos = raiz.getElementsByTagName("contato");

    List<Cliente> lista = new ArrayList<Cliente>(listaContatos.getLength());

    //Passo 3: obter os elementos de cada elemento contato
    for (int i=0; i<listaContatos.getLength(); i++){

        //como cada elemento do NodeList é um nó, precisamos fazer o cast
        Element elementoContato = (Element) listaContatos.item(i);

        //cria um objeto Contato com as informações do elemento contato
        Cliente contato = criaContato(elementoContato);
        lista.add(contato);
    }

    return lista;
}


public String obterValorElemento(Element elemento, String nomeElemento){
    //obtém a lista de elementos
    NodeList listaElemento = elemento.getElementsByTagName(nomeElemento);
    if (listaElemento == null){
        return null;
    }
    //obtém o elemento
    Element noElemento = (Element) listaElemento.item(0);
    if (noElemento == null){
        return null;
    }
    //obtém o nó com a informação
    Node no = noElemento.getFirstChild();
    return no.getNodeValue();
}


public Cliente criaContato(Element elemento){
    Cliente contato = new Cliente();
    contato.setCod(Integer.parseInt(elemento.getAttributeNode("id").getNodeValue()));
    contato.setNome(obterValorElemento(elemento,"nome"));
    contato.setProduto(obterValorElemento(elemento,"produto"));
    contato.setCpf(obterValorElemento(elemento,"cpf"));
    contato.setValorCompra(Float.parseFloat(obterValorElemento(elemento,"valor")));

    return contato;
}

}

  • "Get the position of the list"? was a bit confusing here. to get the list object through the Dice, just use lista.get(i). Could you explain where in the code you posted you want to get the object of the list?

  • Are you willing to do so? list.get(i) This works, but the element within Arraylist has to be a List and not an Object.

  • So that’s the problem list.get(i) isn’t working, because my list is made of an object

  • contatos = (List<Cliente>) parser.realizaLeituraXML(caminho);&#xA;for (Cliente contato : contatos) {&#xA;// System.out.println(contato);&#xA;lista.add(contato);&#xA;gerarRelatorio(lista);&#xA;}

  • Diego, welcome to [en.so]! I think you need to be a little clearer on your question. Show the report structure, where the error occurs and what exactly the message is. The report should already allow you to automatically access the attributes of each object in the list, without needing to retrieve them by the index. So you’re probably mistaken when it comes to implementing the report itself. Hug!

  • I got a little caught up in explaining, this project le archives. xml and takes the tag data by passing to variables of my Client Class, it can read more than one xml at a time, I go and select three xml files it reads all three and fills a list. With this list I can generate the report, but the report has all the data from the list. I wanted to take the first xml and pass it on to an individual report, the second and the third as well. Each xml would have its own report. That’s why I’m trying to get the Dice from the list, because at position[0]is written the data of an xml.

Show 1 more comment
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.