How to implement Fileupload in a Hibernate project with JSF?

Asked

Viewed 43 times

0

I’m with a JSF project with the DAO model using Hibernate, and I’m having a hard time understanding how to save the image in the database.

I would just need to know what the method would look like to save an image in a DAO class and how it would look in the Bean class.

I found this video: https://www.youtube.com/watch?v=2b3KQApdOAU

This one got closer than he needed: http://www.guj.com.br/39230-jsf2---upload-de-imagens

This was a repository I found: https://github.com/wladyband/fileupload

This is the project I’m working for: https://github.com/wladyband/Drogaria/tree/master/Drogaria

And that’s the class I want to introduce: https://github.com/wladyband/Drogaria/blob/master/Drogaria/src/br/com/drogaria/domain/Produto.java

package br.com.drogaria.domain;

import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
@Table(name = "tbl_produtos")
@NamedQueries({
    @NamedQuery(name = "Produto.listar", query = "SELECT p from Produto p"),
    @NamedQuery(name = "Produto.buscarPorCodigo", query = "SELECT p from Produto p where p.codigo = :codigo") })

public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "pro_codigo")
    private Long codigo;

    @NotEmpty(message="O campo descrição é obrigatório")
    @Size(min=5,max=50, message="Tamanho invalido para o campo (5 - 50)")
    @Column(name = "pro_descricao", length = 50, nullable = false)
    private String descricao;

    @NotNull(message="O campo é obrigatório")
    @DecimalMin(value="0.0", message="Informe um valor ou igual a zero para o campo preço")
    @DecimalMax(value="99999.99", message="Informe um valor menor que 100 mil para o campo preço")
    @Column(name = "pro_preco", precision = 7, scale = 2, nullable = false)
    private BigDecimal preco;

    @NotNull(message="O campo é obrigatório")
    @Min(value = 0, message="Informe um valor maior ou igual a zero para o campo quantidade")
    @Max(value = 9999, message="Informe um valor menor ou igual a 9999 para o campo quantidade")
    @Column(name = "pro_quantidade", nullable = false)
    private Integer quantidade;

    @NotNull(message="O campo fabricante é obrigatório")
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "tbl_fabrincantes_fab_codigo", referencedColumnName = "fab_codigo", nullable = false)
    private Fabricante fabricante;

    public Long getCodigo() {
        return codigo;
    }

    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

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

    public BigDecimal getPreco() {
        return preco;
    }

    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }

    public Integer getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }

    public Fabricante getFabricante() {
        return fabricante;
    }

    public void setFabricante(Fabricante fabricante) {
        this.fabricante = fabricante;
    }

    @Override
    public String toString() {
        return "Produto [codigo=" + codigo + ", descricao=" + descricao
                + ", preco=" + preco + ", quantidade=" + quantidade
                + ", fabricante=" + fabricante + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Produto other = (Produto) obj;
        if (codigo == null) {
            if (other.codigo != null)
                return false;
        } else if (!codigo.equals(other.codigo))
            return false;
        return true;
    }

}

The GUJ website helped me a little with this post, and I still can’t solve my problem.

http://www.guj.com.br/39728-como-gravar-imagens-na-base-de-dados-em-jsf

I know the way to do it is similar to this model below, I just need to know how to adapt this model to my project.

@ManagedBean(name = "fileUploadMB")
@RequestScoped
public class fileUploadMB {
    public static byte[] arquivo;
    public static String nomeArquivo;
    private Ouvidoria ouvidoriaCadastro;

    public Ouvidoria getOuvidoriaCadastro() {
        if (ouvidoriaCadastro == null) {
            ouvidoriaCadastro = new Ouvidoria();
        }
        return ouvidoriaCadastro;
    }


    public void setOuvidoriaCadastro(Ouvidoria ouvidoriaCadastro) {
        this.ouvidoriaCadastro = ouvidoriaCadastro;
    }

    /* Método que faz o Upload dos arquivos */
    public void doUpload(FileUploadEvent fileUploadEvent) throws IOException {

        UploadedFile uploadedFile = fileUploadEvent.getFile();

        String fileNameUploaded = uploadedFile.getFileName();
        long fileSizeUploaded = uploadedFile.getSize();
        System.out.println(uploadedFile);

        // arquivo = uploadedFile.getContents();
        String infoAboutFile = "<br/> Arquivo recebido: <b>" + fileNameUploaded
                + "</b><br/>" + "Tamanho do Arquivo: <b>" + fileSizeUploaded
                + "</b>";
        //Mensagem exibida na tela
        FacesContext facesContext = FacesContext.getCurrentInstance();
        facesContext.addMessage(null,
                new FacesMessage("Sucesso", infoAboutFile));

        arquivo = (IOUtils.toByteArray(uploadedFile.getInputstream()));
        nomeArquivo = uploadedFile.getFileName();

        ouvidoriaCadastro.setArquivo(arquivo);
        ouvidoriaCadastro.setNomeArquivo(fileNameUploaded);
        ouvidoriaCadastro.setNomeArquivo(nomeArquivo);

        System.out.println("Arquivo capturado" + arquivo);
        System.out.println("Nome do Arquivo" + nomeArquivo);

    }

}

Page:

<p:outputLabel value="Selecione um Arquivo(Opcional):" />
<p:fileUpload fileUploadListener="#{fileUploadMB.doUpload}"
    mode="advanced" showButtons="false" label="Enviar Arquvios.." auto="true" />
  • What would be necessary to avoid the duplicate?

  • You can edit your question including the details of this question, since it is the same. To edit the other question, access this link: Edit How to Save Image to Database with JSF2. After this, consider removing this question.

  • I’m sorry, I don’t understand.

No answers

Browser other questions tagged

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