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?– Skywalker
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.
– mvessaro8
So that’s the problem list.get(i) isn’t working, because my list is made of an object
– sinkz
contatos = (List<Cliente>) parser.realizaLeituraXML(caminho);
for (Cliente contato : contatos) {
// System.out.println(contato);
lista.add(contato);
gerarRelatorio(lista);
}
– sinkz
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!
– utluiz
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.
– sinkz