Como pegar uma imagem no MySQL e exibi-la em uma page JSF?

Consegui enviar uma imagem do JSF para o banco de dados MySQL usando uma tabela com campo Blob, gostaria de saber uma forma de pegar de volta essa imagem e posta-la em uma page JSF usando o campo h:graphicImage.

Pagina JSF

<h:form enctype="multipart/form-data">
	<h:panelGrid columns="3">
		<h:outputLabel value="Arquivo" for="arquivo" />
		<h:inputFile id="arquivo" required="true"
			value="#{uploadFileBean.arquivo}"
			requiredMessage="Informe o arquivo" />
		<h:message for="arquivo" />
		<h:graphicImage></h:graphicImage>
		<h:commandButton action="#{uploadFileBean.upload}"
			value="Upload enviar">
			<f:ajax execute="@form" render="@form" />
		</h:commandButton>
	</h:panelGrid>
</h:form>
1 curtida

método de upload no @Controller

public void upload() throws IOException {
    System.out.println(arquivo.getSubmittedFileName());

	byte[] arquivoByte = toByteArrayUsingJava(arquivo.getInputStream());
	
	uploadArquivo.setDescricao(arquivo.getSubmittedFileName());
	uploadArquivo.setArquivo(arquivoByte);
	
	uploadArquivoService.save(uploadArquivo);
	
	uploadArquivo = new UploadFile();
	arquivo = null;
	
}
1 curtida
2 curtidas

Valeu Abner, eu já havia visto estes tópicos antes, não estou utilizando Primefaces em meu projeto, por tanto acredito que os procedimentos devem mudar um pouco, estou usando apenas JSF e gostaria de saber como funciona a tag h:graphicImage buscando do banco Mysql

A tag h:graphicImage aponta para o contexto do projeto, então a imagem teria que estar em resources.

Eu tentaria usar a tag img, mas como você salvou a imagem no banco e não o caminho, não sei como vc faria utilizando ela :confused:

Eu não sei como funciona a leitura de uma imagem no banco (eu sempre salvo o caminho), mas o graphicImage do OmniFaces aceita InputString e byte[]

http://showcase.omnifaces.org/components/graphicImage

O OmniFaces é bem leve, se você quiser coloca-lo no projeto para ver o que da…

1 curtida

Grande Mike, blz? estou utilizando a implementação do mojarra, sera que se comporta da mesma forma?

Opa, blz e você?

Eu não encontrei em nenhum lugar falando que eles desenvolveram utilizando Mojarra ou Myfaces, mas o Mojarra é a implementação padrão e a mais usada do JSF, então deve funcionar.

Os requerimentos de acordo com o proprio OmniFaces são esses:

An important design goal will be to have as few dependencies as possible and to be minimally invasive.

OmniFaces 3.x requires Java 1.8, JSF 2.3, EL 3.0, Servlet 3.1, CDI 2.0, WS 1.1
OmniFaces 2.x requires Java 1.7, JSF 2.2, EL 2.2, Servlet 3.0, CDI 1.1, WS 1.1
OmniFaces 1.x requires Java 1.6, JSF 2.0, EL 2.1, Servlet 2.5

For users who are still on JSF 2.2, use 2.7 instead.

1 curtida

Tudo ótimo!

sendo assim, no meu jsf eu devo apontar no meu <h:graphicImage value=""/> um objeto do tipo InputString ?

Seria um <o:graphicImage /> que é o graphicImage do OmniFaces e no value você passa o inputStream ou byte[]

Entendi, mas no meu caso vou tentar com o h:graphicImage, vou ver se funciona, como eu conseigo transformar um byte[] arquivo em um inputStream?

h:graphicImage eu não sei se funciona com inputStream, que eu saiba funciona apenas com imagens salva em resources

caso eu use o:graphicImage, como eu conseigo transformar um byte[] arquivo em um inputStream?

Assim:

byte[] byteArray = new byte[] { 0xC, 0xA, 0xF, 0xE };
InputStream is = new ByteArrayInputStream(byteArray);
1 curtida
private InputStream is;


   public InputStream getIs() {
	return is;
}

public void setIs(InputStream is) {
	this.is = is;
}

public void findImagebyId() {
UploadFile up = uploadArquivoService.findById(3);
is= new ByteArrayInputStream(up.getArquivo());
}

estou tentando assim, mas nao da certo

Da uma olhada:
http://showcase.omnifaces.org/cdi/GraphicImageBean

Gera algum erro ai?

a unica dependencia que preciso por é essa? ou tem outra?

	<!-- https://mvnrepository.com/artifact/org.omnifaces/omnifaces -->
	<dependency>
		<groupId>org.omnifaces</groupId>
		<artifactId>omnifaces</artifactId>
		<version>2.7</version>
	</dependency>

da esse erro

log.txt (63,0 KB)

Que eu saiba precisa de CDI, mas o Wildfly ja vem com ele

OmniFaces 2.x requires Java 1.7, JSF 2.2, EL 2.2, Servlet 3.0, CDI 1.1, WS 1.1

Eu não to podendo olhar exception agora :confused:

1 curtida

Mike, pelo que li se torna mais facil pelo primefaces fazer esse procedimento, como voce disse

baixei a biblioteca do primefaces

<p:graphicImage></p:graphicImage>

no value="" eu devo apontar para um objeto do tipo InputStream é isso?