Cícero Ednilson

Blog sobre Desenvolvimento de Softwares

Home » Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 14: Exportando arquivo XML com fileDownload e Jdom.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 14: Exportando arquivo XML com fileDownload e Jdom.

Nessa parte do nosso tutorial vamos aprender a gerar um arquivo xml em um diretório com Jdom e exportar esse arquivo via download com fileDownload do PrimeFaces.

Páginas do tutorial.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 1: Introdução.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 2: Criando o banco de dados.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 3: Criando o projeto com JSF no Maven.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 4: Criando o template com Facelets.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 5: Desenvolvendo a autenticação do sistema.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 6: Desenvolvendo cadastro de pessoa.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 7: Desenvolvendo cadastro via upload de arquivo XML.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 8: Desenvolvendo consulta com PrimeFaces dataTable.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 9: Formatando LocalDateTime.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 10: Editando um registro.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 11: Excluindo um registro.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 12: Consulta com Carousel PrimeFaces.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 13: Consulta com Gráfico PrimeFaces.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 14: Exportando arquivo XML com fileDownload e Jdom.

Criando rotina para geração e download de arquivo.

No nosso pacote br.com.ciceroednilson.pessoa.controller, vamos criar uma classe com o nome de ExportarRegistrosXmlController, depois vamos deixar nossa classe com o código abaixo.

Atenção: Na linha 98 estou informando que o arquivo vai ser salvo em um sub diretório da minha pasta home, não esqueça de trocar esse caminho quando for salvar o arquivo no seu sistema operacional.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package br.com.ciceroednilson.pessoa.controller;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.Serializable;
import java.time.format.DateTimeFormatter;
import java.util.List;
 
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
 
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
 
import br.com.ciceroednilson.model.PessoaModel;
import br.com.ciceroednilson.repository.PessoaRepository;
 
@Named(value="exportarRegistrosXmlController")
@RequestScoped
public class ExportarRegistrosXmlController implements Serializable {
 
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
 
	@Inject transient
	PessoaRepository pessoaRepository; 
 
	private StreamedContent arquivoDownload;
 
	/***
	 * REALIZA O DOWNLOAD DO ARQUIVO XML
	 * @return
	 */
	public StreamedContent getArquivoDownload() {
 
		this.DownlaodArquivoXmlPessoa();
 
		return arquivoDownload;
	}
 
	/***
	 * GERANDO ARQUIVO XML PARA EXPORTAÇÃO.
	 * @return
	 */
	private File GerarXmlPessoas(){
 
		//MASCARA PARA FORMATAR A DATA QUE VAI SER ADICIONADA NO ARQUIVO XML
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
 
		List<PessoaModel> pessoasModel = pessoaRepository.GetPessoas();
 
		//ELEMENTO RAIZ DO NOSSO ARQUIVO XML
		Element elementPessoas = new Element("Pessoas");
 
		Document documentoPessoas = new Document(elementPessoas);
 
		pessoasModel.forEach(pessoa -> {
 
 
			//MONTANDO AS TAGS DO XML COM OS SEUS VALORES
			Element elementPessoa = new Element("Pessoa");			
			elementPessoa.addContent(new Element("codigo").setText(pessoa.getCodigo().toString()));
			elementPessoa.addContent(new Element("nome").setText(pessoa.getNome()));
			elementPessoa.addContent(new Element("sexo").setText(pessoa.getSexo()));
 
			//FORMATANDO A DATA
			String dataCadastroFormatada = pessoa.getDataCadastro().format(dateTimeFormatter);
 
			elementPessoa.addContent(new Element("dataCadastro").setText(dataCadastroFormatada));
 
			elementPessoa.addContent(new Element("email").setText(pessoa.getEmail()));
			elementPessoa.addContent(new Element("endereco").setText(pessoa.getEndereco()));
			elementPessoa.addContent(new Element("origemCadastro").setText(pessoa.getOrigemCadastro()));
			elementPessoa.addContent(new Element("usuarioCadastro").setText(pessoa.getUsuarioModel().getUsuario()));
 
			elementPessoas.addContent(elementPessoa);
		});
 
 
		XMLOutputter xmlGerado = new XMLOutputter();
 
		try {
 
 
			/*GERANDO O NOME DO ARQUIVO*/
			String nomeArquivo =  "pessoas_".concat(java.util.UUID.randomUUID().toString()).concat(".xml");
 
			//CAMINHO ONDE VAI SER GERADO O ARQUIVO XML
			File arquivo = new File("/home/cicero/gerados/".concat(nomeArquivo));
 
			FileWriter fileWriter =  new FileWriter(arquivo);
 
 
			xmlGerado.output(documentoPessoas, fileWriter);
 
			return arquivo;
 
		} catch (Exception ex) {
 
			ex.printStackTrace();
		}		
 
		return null;
	}
 
	/***
	 * PREPARA O ARQUIVO PARA DOWNLOAD
	 */
	public void DownlaodArquivoXmlPessoa(){
 
		File arquivoXml = this.GerarXmlPessoas();
 
		InputStream inputStream;
 
		try {
 
			inputStream = new FileInputStream(arquivoXml.getPath());
 
			arquivoDownload = new DefaultStreamedContent(inputStream,"application/xml",arquivoXml.getName());
 
		} catch (FileNotFoundException e) {
 
			e.printStackTrace();
		}
 
 
 
	}
}

Criando página para exportar o arquivo XML.

Primeiro na pasta imagens do nosso projeto vamos adicionar a imagem que deixei disponível aqui, quando demorar para gerar o arquivo a página deve mostrar essa imagem de progresso.

Agora na nossa pasta sistema vamos adicionar uma página com o nome de exportarRegistrosXml.xhtml, depois vamos adicionar o código abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
	xmlns:h="http://xmlns.jcp.org/jsf/html"
	xmlns:f="http://xmlns.jcp.org/jsf/core"
	xmlns:p="http://primefaces.org/ui">
 
 
<ui:composition template="/template/layoutBase.xhtml">
 
	<ui:define name="content">
 
		<p:dialog modal="true" widgetVar="statusDialog" header="Status" draggable="false" closable="false" resizable="false">
    		<p:graphicImage url="/resources/imagens/ajax-loader.gif" />
		</p:dialog>
 
		<h:form id="form-download-xml">
 
			<p:commandButton value="Download" 
							 ajax="false"
							 icon="ui-icon-arrowthick-1-s"
							 id="commandButton-download">
 
        		<p:fileDownload value="#{exportarRegistrosXmlController.arquivoDownload}" />
 
    		</p:commandButton>
 
 
		</h:form>
 
 
	</ui:define>
 
</ui:composition>
 
</html>

Agora no nosso header.xhtml vamos adicionar a chamada da nossa página como mostra a imagem abaixo.

Testando a aplicação.

Vamos realizar o deploy da nossa aplicação e então vamos acessar o menu Exportar XML Pessoa.

Agora vamos clicar no botão Download, e depois vamos ver a popup abaixo, então bastar clicar em OK para salvar o arquivo XML que foi gerado.

Também podemos ver o arquivo gerado na pasta que definimos.

Abaixo podemos ver o xml que foi gerado.

É isso ai amigos, essa foi a última parte do nosso tutorial, você pode pegar o código fonte aqui, até a próxima.

Comentários

Name of author

Name: ciceroednilson@gmail.com

7 thoughts on “Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 14: Exportando arquivo XML com fileDownload e Jdom.

  • Cícero,
    parabéns pela dedicação e pelo seu trabalho em compartilhar um tutorial como esse.
    Saúde e tudo de bom pra você.
    Um grande abraço
    Marcao

    Reply
  • Parabéns, pela iniciativa.

    Saúde e Paz.

    Abraços.

    Reply
  • Diego Alberto Rhoden

    Cara, parabéns mesmo!

    Deus abençoe sua contribuição para um mundo melhor!

    Um abraço e até os próximos conteúdos!

    Curso Tecnologia em Análise e Desenvolvimento de Sistemas – Univel – Cascavel – PR

    Reply
    • ciceroednilson@gmail.com Post author

      Obrigado por visitar o blog Diego,

      Estou sempre postando novos tutoriais, não deixe de acompanhar.

      Abraços,
      Cícero Ednilson.

      Reply
  • Cicero parabéns pelo tutorial. Bastante objetivo e tenho certeza que irá ajudar muita gente assim como eu.

    Reply

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *