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