1
resposta

Exibir imagem dinamica primefaces

Bom dia galera,

Estou me aprimorando aqui no JSF + Primefaces e estou tentando descobrir como carregar uma imagem que o endereço da mesma está na minha base de dados.

Lá tenho uma coluna onde armazeno endereço de imagens.

No Java Swing apenas faço isso:

Icon personagemImagem = new ImageIcon(caminhoImagem);

Será que alguém poderia me apresentar uma solução? Se possível com exemplo de código. Pois na documentação do primefaces é mostrado como usar imagem dinamicamente mas não entendi nada.

Desde já, agradeço a qualquer tentativa de auxílio.

1 resposta

Olá Rafael

Fico feliz em saber que você está se aprimorando em JSF + Primefaces. Vou te ajudar com a sua dúvida sobre como carregar uma imagem dinamicamente a partir de um endereço armazenado no banco de dados.

No Primefaces, você pode utilizar o componente "graphicImage" para exibir a imagem de forma dinâmica. Para isso, você precisa criar um método no seu bean que retorne um objeto do tipo "StreamedContent", que é responsável por representar o conteúdo da imagem.

Aqui está um exemplo de código para você entender melhor:

No seu bean:

import org.primefaces.model.StreamedContent;
import javax.faces.context.FacesContext;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;

public StreamedContent getImagemDinamica() throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    String caminhoImagem = //obtenha o endereço da imagem do seu banco de dados aqui;
    BufferedImage imagem = ImageIO.read(new File(caminhoImagem));
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    ImageIO.write(imagem, "jpg", outputStream);
    return DefaultStreamedContent.builder()
            .contentType("image/jpeg")
            .stream(() -> new ByteArrayInputStream(outputStream.toByteArray()))
            .build();
}

No seu XHTML:

<p:graphicImage value="#{seuBean.imagemDinamica}" />

Nesse exemplo, o método "getImagemDinamica" recebe o endereço da imagem do seu banco de dados, lê a imagem utilizando a classe "ImageIO" e retorna um objeto "StreamedContent" contendo a imagem.

No XHTML, você utiliza o componente "graphicImage" e atribui o valor ao método do seu bean que retorna a imagem dinâmica.

Espero que essa solução te ajude a exibir a imagem dinamicamente no Primefaces. Se tiver mais alguma dúvida, é só perguntar