Upload de arquivos com jsf 2.2

Upload de arquivos com jsf 2.2. Olá pessoal é o Alex do Java Avançado Cursos TI mais uma vez trazendo uma super dica pra vocês de forma simples e funcional.

Aprenda como fazer upload de arquivos usando Jsf puro sem PrimeFaces. No vídeo de hoje vamos aprender a criar:

  • A entidade que representa a tabela no banco de dados
  • O repositório e DAO
  • O ManagedBean JSF
  • A tela Jsf para fazer o upload para o banco de dados

 

 

 

Somente no JSF 2.2 é que foi introduzido o suporte a upload de arquivos. Antes éramos obrigados a usar alguma biblioteca de componentes, como PrimeFaces ou RichFaces para conseguir fazer o upload de arquivos com jsf.

Podemos usar o upload de arquivos do JSF 2.2 através do componente h:inputFile, na qual funciona como qualquer outro componente de entrada de dados. O único pré-requisito, é modificar o encoding da submissão do formulário para multipart/form-data através do atributo enctype do componente h:form.

 

Entidade do banco de dados

Classe Java mapeada com JPA que representa nossa tabela e possui o campo byte com @Lob para gravar arquivos no banco de dados.

package org.jboss.tools.example.springmvc.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;

@Entity
public class ArquivoUploadAula {

	@Id
	@GeneratedValue
	private Long id;

	private String descricao;

	@Lob
	private byte[] arquivo;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public byte[] getArquivo() {
		return arquivo;
	}

	public void setArquivo(byte[] arquivo) {
		this.arquivo = arquivo;
	}

}

 

Interface Repository

Interface Java responsável pelo DAO de persistência para salvar no banco de dados.

package org.jboss.tools.example.springmvc.data;

import org.jboss.tools.example.springmvc.model.ArquivoUploadAula;

public interface UploadArquivoAulaInterface {
	
	void salvar(ArquivoUploadAula arquivoUploadAula);
	
}

 

Implementação da interface Repository

Implementação da Interface Repository Java responsável pelo DAO de persistência para salvar no banco de dados.

package org.jboss.tools.example.springmvc.data;

import org.jboss.tools.example.springmvc.model.ArquivoUploadAula;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;

@Repository("uploadArquivoAula")
@Transactional
@EnableTransactionManagement
public class UploadArquivoAulaDaoImpl extends GenericDAO<ArquivoUploadAula> implements UploadArquivoAulaInterface {

	@Override
	public void salvar(ArquivoUploadAula arquivoUploadAula) {
		super.em.persist(arquivoUploadAula);

	}

}

 

ManagedBean responsável pela tela de upload

Em nosso managedBean possuímos o método de upload, o método que converte para byte[] para ser gravado no banco de dados e os objetos responsáveis por trazerem os dados da tela até a camada de persistência de dados.

package org.jboss.tools.example.jsf.managedbean;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.servlet.http.Part;

import org.jboss.tools.example.springmvc.data.UploadArquivoAulaInterface;
import org.jboss.tools.example.springmvc.model.ArquivoUploadAula;

@RequestScoped
@ManagedBean(name = "uploadArquivoBean")
public class UploadArquivoBean {

	private ArquivoUploadAula arquivoUploadAula = new ArquivoUploadAula();

	@ManagedProperty(name = "uploadArquivoAula", value = "#{uploadArquivoAula}")
	private UploadArquivoAulaInterface uploadArquivoAula;

	private Part arquivo;
	
	
	public void upload () throws IOException{
		System.out.println(arquivo.getContentType());
		
		byte[] arquivoByte = toByteArrayUsingJava(arquivo.getInputStream());  
		
		arquivoUploadAula.setArquivo(arquivoByte);
		
		uploadArquivoAula.salvar(arquivoUploadAula);
		
		Scanner conteudo = new Scanner(arquivo.getInputStream());
		
		while(conteudo.hasNext()) {
			System.out.println(conteudo.next());
		}
	}
	

	public ArquivoUploadAula getArquivoUploadAula() {
		return arquivoUploadAula;
	}

	public void setArquivoUploadAula(ArquivoUploadAula arquivoUploadAula) {
		this.arquivoUploadAula = arquivoUploadAula;
	}

	public UploadArquivoAulaInterface getUploadArquivoAula() {
		return uploadArquivoAula;
	}

	public void setUploadArquivoAula(UploadArquivoAulaInterface uploadArquivoAula) {
		this.uploadArquivoAula = uploadArquivoAula;
	}

	public Part getArquivo() {
		return arquivo;
	}

	public void setArquivo(Part arquivo) {
		this.arquivo = arquivo;
	}
	
	
	public byte[] toByteArrayUsingJava(InputStream is) throws IOException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int reads = is.read();
		while (reads != -1) {
			baos.write(reads);
			reads = is.read();
		}
		return baos.toByteArray();
	}


}

 

Página XHTML JSF

Página completa de upload de arquivos em JSF puro.

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:rich="http://richfaces.org/rich" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:a4j="http://richfaces.org/a4j" xmlns:h="http://java.sun.com/jsf/html">

<h:head></h:head>
<body>
	<h:form enctype="multipart/form-data">
		<h:panelGrid columns="3">
			<h:outputLabel value="Descrição" for="descricao" />
			<h:inputText id="descricao" value="#{uploadArquivoBean.arquivoUploadAula.descricao}" required="true" requiredMessage="Informe a descrição" />

			<h:message for="descricao" />

			<h:outputLabel value="Arquivo" for="arquivo" />
			<h:inputFile id="arquivo" required="true" value="#{uploadArquivoBean.arquivo}" requiredMessage="Informe o arquivo" />

			<h:message for="arquivo" />


			<h:commandButton action="#{uploadArquivoBean.upload()}" value="Upload enviar">
				<f:ajax execute="@form" render="@all" />
			</h:commandButton>
		</h:panelGrid>
	</h:form>
</body>
</html>

 

Upload de arquivos com jsf 2.2.

Saber que existe um componente para upload de arquivos na biblioteca do PrimeFaces não diminui muito a quantidade de problemas que podemos ter ao utilizá-lo.

Caso você não esteja usando o PrimeFaces junto com o JSF então você pode assistir nossa aula no início do post e usar o código fonte disponível.

Assis ao vídeo em nosso canal no Youtube no link AQUI.

 

Curso de JSF e PrimeFaces

Conheça nosso curso completo de JSF e PrimeFaces clicando no link AQUI.

 

 


Acesse
Cursos e Projetos
Java
Acesse
Outros Cursos
PHP MySQL Android
Acesse
Encomende um Projeto
Feito pra Você
Acesse
Tire as Dúvidas On-line
Consultor
Acesse
Aulas de Java só suas
Encomende Agora
Acesse
Dividindo Conhecimento
Posts e Tutoriais
Acesse
Sites e Parceiros
Associados
Acesse
Menu Inicial
Home Page

Deixe uma resposta

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

Instrutor Java Quer se tornar aluno VIP? CLIQUE AQUI!
Instrutor Java Alex Fernando Egidio
Autor, criador e fundador do Java Avançado Cursos TI. Atua no mercado como desenvolvedor e engenheiro de sistemas em Java é apaixonado por desenvolvimento web em Java e pela “mágica” que seus frameworks trazem para o dia a dia de nós desenvolvedores.
Com mais de 10 anos de experiência ajuda programadores do Brasil todo a se tornarem profissionais.