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

43 respostas Resolvido
jsfjavamysqlimage
A

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>

43 Respostas

A

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;
	
}
R
A

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

M

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…

A

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

M

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.

A

Tudo ótimo!

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

M

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

A

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?

M

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

A

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

M

Assim:

byte[] byteArray = new byte[] { 0xC, 0xA, 0xF, 0xE };
InputStream is = new ByteArrayInputStream(byteArray);
A
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());

}
A

estou tentando assim, mas nao da certo

M

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

Gera algum erro ai?

A

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>
A

da esse erro

log.txt (63,0 KB)

M

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:

A

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?

M
Solucao aceita

Com o PrimeFaces é tranquilo, é a biblioteca mais completa pra JSF e ACHO que é a biblioteca de componentes mais completa de todas as linguagens.

Você tem duas maneiras de usar o p:graphicImage, uma que é referenciando a imagem da pasta resources e outra é apontar um obj StreamedContent para o atributo value

<p:graphicImage value="#{bean.meuStreamedContent}" />

StreamedContent é uma interface que tem o propósito de representar um arquivo seu, no caso a imagem.

A gente não pode instanciar uma interface, mas podemos utilizar polimorfismo para referenciar uma classe que implementa StreamedContent, assim:

StreamedContent streamedContent = new DefaultStreamedContent(new ByteArrayInputStream(byteArray));

O construtor de DefaultStreamedContent aceita qualquer classe que seja uma inputStream

A

muito Obrigado mais uma vez mike, vou tentar aqui e aviso se der certo!

M

Magina :+1:

O p:graphicImage com DefaultStreamedContent tem um problema em relação ao ciclo de vida, então da uma olhada abaixo com atenção, caso você tenha algum problema talvez isso ajude

The <p:graphicImage> will call the getter method twice. First time is when the element is to be rendered to HTML and thus requires an URL in the src attribute. If you just return new DefaultStreamedContent(), then it will autogenerate the right URL in src attribute. Second time is when the browser really requests the image, this is the moment when you should return the actual image.

So, the getter method should basically look like this:

public StreamedContent getStreamedImageById() {
    FacesContext context = FacesContext.getCurrentInstance();

    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
        // So, we're rendering the view. Return a stub StreamedContent so that it will generate right URL.
        return new DefaultStreamedContent();
    }
    else {
        // So, browser is requesting the image. Get ID value from actual request param.
        String id = context.getExternalContext().getRequestParameterMap().get("id");
        Image image = service.find(Long.valueOf(id));
        return new DefaultStreamedContent(new ByteArrayInputStream(image.getBytes()));
    }
}

Peguei isso do stackoverflow em um post do BalusC

A

eu estou tentando fazer da primeira forma, e nao ta dando certo, a imagem do banco nao vem. o console apresenta o seguinte erro.

08:00:22,671 WARN PageNotFound:1248 - No mapping for GET /intranet/uploadFileBean.getImage

fiz da seguinte forma:

bean

public void getImage() {

sc = new DefaultStreamedContent(new ByteArrayInputStream(uploadArquivoService.findById(3).getArquivo()));
}

<h:form>
<h:panelGrid>

<p:graphicImage value="uploadFileBean.sc"></p:graphicImage>

						</h:panelGrid>

					</h:form>
M

Não deveria ser uma EL?

<p:graphicImage value="#{uploadFileBean.sc}"></p:graphicImage>
A

é isso mesmo, mas agora ele me apresentou o seguinte erro

09:19:44,302 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /intranet/ImagesFromCarrousel.xhtml: javax.servlet.ServletException: Error Parsing /ImagesFromCarrousel.xhtml: Error Traced[line: 40] Open quote is expected for attribute value associated with an  element type  p:graphicImage.

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:683)

at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)

at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)

at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)

at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)

at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)

at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)

at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)

at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)

at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)

at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)

at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)

at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)

at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)

at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)

at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)

at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)

at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)

at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)

at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)

at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)

at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)

at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)

at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)

at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)

at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)

at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)

at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)

at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)

at java.lang.Thread.run(Unknown Source)

Caused by: javax.faces.view.facelets.FaceletException: Error Parsing /ImagesFromCarrousel.xhtml: Error Traced[line: 40] Open quote is expected for attribute value associated with an  element type  p:graphicImage.

at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:487)

at com.sun.faces.facelets.compiler.SAXCompiler.doMetadataCompile(SAXCompiler.java:470)

at com.sun.faces.facelets.compiler.Compiler.metadataCompile(Compiler.java:130)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.createMetadataFacelet(DefaultFaceletFactory.java:497)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.access$200(DefaultFaceletFactory.java:107)

at com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:208)

at com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:205)

at com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:100)

at com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:93)

at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:100)

at java.util.concurrent.FutureTask.run(Unknown Source)

at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:115)

at com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:148)

at com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:63)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:310)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:240)

at com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:146)

at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:247)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:133)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:201)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:670)

 78 more
09:21:17,906 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /intranet/ImagesFromCarrousel.xhtml: javax.servlet.ServletException: Error Parsing /ImagesFromCarrousel.xhtml: Error Traced[line: 41] Open quote is expected for attribute value associated with an  element type  p:graphicImage.

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:683)

at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)

at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)

at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)

at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)

at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)

at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)

at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)

at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)

at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)

at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)

at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)

at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)

at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)

at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)

at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)

at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)

at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)

at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)

at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)

at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)

at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)

at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)

at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)

at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)

at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)

at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)

at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)

at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)

at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1502)

at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)

at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)

at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)

at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)

at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)

at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)

at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)

at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)

at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)

at java.lang.Thread.run(Unknown Source)

Caused by: javax.faces.view.facelets.FaceletException: Error Parsing /ImagesFromCarrousel.xhtml: Error Traced[line: 41] Open quote is expected for attribute value associated with an  element type  p:graphicImage.

at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:487)

at com.sun.faces.facelets.compiler.SAXCompiler.doMetadataCompile(SAXCompiler.java:470)

at com.sun.faces.facelets.compiler.Compiler.metadataCompile(Compiler.java:130)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.createMetadataFacelet(DefaultFaceletFactory.java:497)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.access$200(DefaultFaceletFactory.java:107)

at com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:208)

at com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:205)

at com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:100)

at com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:93)

at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:100)

at java.util.concurrent.FutureTask.run(Unknown Source)

at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:115)

at com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:148)

at com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:63)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:310)

at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:240)

at com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:146)

at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:247)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:133)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:201)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:670)

 78 more
A

essa é minha pagina JSF

no primeiro form eu envio a imagem, no segundo eu deveria recebe-la

A

public class UploadFileBean {

private StreamedContent sc;
private Part arquivo;
private UploadFile uploadArquivo = new UploadFile();
@Autowired
UploadFileService uploadArquivoService;

public Part getArquivo() {
	return arquivo;
}

public void setArquivo(Part arquivo) {
	this.arquivo = arquivo;
}

public UploadFile getUploadArquivo() {
	return uploadArquivo;
}

public void setUploadArquivo(UploadFile uploadArquivo) {
	this.uploadArquivo = uploadArquivo;
}

@PostConstruct
public void init() {
	getImage();
}

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;
	
}

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();
}

public StreamedContent getSc() {
	return sc;
}

public void setSc(StreamedContent sc) {
	this.sc = sc;
}

public void getImage() {
	sc = new DefaultStreamedContent(new ByteArrayInputStream(uploadArquivoService.findById(3).getArquivo()));
}

}

M

A sua EL ficou sem as aspas

A

DEU CERTO MAN!!! tu é o cara mesmo! kkk foi mal os vacilos! to apredendo agora! abraço!

M

Haha que nada, quando a gente ta aprendendo algo novo fazemos cada cagada kkk
Valeu!

M

“Cadastrar Novo Cardápio”
Ai aparece uma foto sua :joy::joy::joy::joy:
Zoera
Abraços!

A

:rofl::rofl::rofl::rofl::rofl::rofl: que duplo sentido kkkkkkk nem me toquei! foi só um teste kkkkk

A

@Mike

pq quando ponho o Objeto StreamedContent em uma Lista ele nao funciona mais?

<h:form id="form-imagens">
						<div class="table-responsive">
							<h:dataTable id="tabela"
								rendered="#{not empty uploadFileBean.streamedContentList}"
								value="#{uploadFileBean.streamedContentList}" var="c"
								styleClass="table table-hover table-sm" width="100%">
								<h:column>
									<f:facet name="header">IMAGEM</f:facet>
                                   <p:graphicImage value="#{c}"></p:graphicImage>
                                </h:column>
								
							</h:dataTable>
						</div>
						
					</h:form>

M

Da uma olhada nesse post (que é o que eu postei antes)

Tem um workaround, basicamente você terá que ver em que fase o ciclo de vida esta e então retornar o streamedContent]

No exemplo do post, o cara passou o indentificador da imagem através de f:param e então pegou no método

<p:graphicImage id="photo" value="#{registrarPedidoController.streamedImageById}" cache="FALSE">
    <f:param name="inv" value="#{inv.id}" />
</p:graphicImage>
String id = context.getExternalContext().getRequestParameterMap().get("id"); 
Image image = service.find(Long.valueOf(id));
return new DefaultStreamedContent(new ByteArrayInputStream(image.getBytes()));
A

Mike, desculpa nao entendi a explicação do cara, nem a tratativa dele :sob::sob::sob:, vc conseguiu entender o que ele fez pras imagens aparecerem na lista p:datable?

M

O p:graphicImage chama o método duas vezes durante o ciclo de vida, ai você tem que verificar em qual fase do ciclo de vida esta, dependendo da fase você retorna a imagem, que é o que cara fez:

public StreamedContent getStreamedImageById() {
    FacesContext context = FacesContext.getCurrentInstance();

    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
        // So, we're rendering the view. Return a stub StreamedContent so that it will generate right URL.
        return new DefaultStreamedContent();
    }
    else {
        // aqui esta pegando o parametro passado através de f:param, o f:param funciona como um map (chave e valor)
        String id = context.getExternalContext().getRequestParameterMap().get("id");
        Image image = service.find(Long.valueOf(id));
        return new DefaultStreamedContent(new ByteArrayInputStream(image.getBytes()));
    }
}

Em f:param ele passou um valor para a requisição e então pegou esse valor no bean.
Esse valor é a própria identificação da imagem (valor único, que no caso é o id)

Você deve ter alguma maneira de especificar qual imagem quer através de um valor, que foi o que ele fez

<p:dataTable id="table-cardapio" var="cardapio" value="#{cardapioBean.cardapios}">                          
    <p:column>
        <p:graphicImage id="photo" value="#{registrarPedidoController.streamedImageById}" cache="FALSE">
            <f:param name="id" value="#{cardapio.id}" />
        </p:graphicImage>                                
    </p:column>
</p:dataTable>

No código acima foi passado um parâmetro com o nome id e o valor é o id do objeto, mas poderia ser qualquer nome e qualquer atributo, mas eu entendo que o id é um valor único, então usei ele.

O value do graphicImage vai chamar um método que retorna um streamedContent, e dentro desse método vai pegar o parâmetro passado e buscar a imagem no banco através desse parâmetro (primeiro código postado)

EDIT: Da uma olhada ai e se não conseguir posta como o seu código esta e o erro

A

entendi! e seu eu nao quiser especificar qual item eu quero pegar, e sim quiser buscar toda uma lista de imagens também deverá funcionar??

M

Funciona, só que ai você vai precisar fazer a mesma tratativa de ciclo de vida de qualquer jeito

A

Certo! ficou assim minha tratativa

eu retorno uma lista vazia caso caia dentro do IF

A

Bom, nao apresenta nenhum erro no console, mas a lista esta vindo vazia.

depurei o codigo e observei que esta caindo dentro do IF na tratativa, pq sera??

M

O p:graphicImage chama o método duas vezes, uma delas é na fase RENDER_RESPONSE

Ali na p:column deveria ser a p:graphicImage, não?

Sempre da uma olhada no console do navegador também

A

è verdade, mas pelo que vi a data table que o carinha usa no post dele, é bem mais complexa, ele chama sempre por id os itens da Lista, acho que da minha forma nao vai funcionar.
acredito que deva ser parecida com isso

<p:dataTable id=“tablaInventario” var=“inv” value="#{registrarPedidoController.inventarioList}" paginator=“true” rows=“10"

selection=”#{registrarPedidoController.inventarioSelected}" selectionMode=“single"

update=“tablaInventario tablaDetalle total totalDesc” dblClickSelect=“false” paginatorPosition=“bottom”>

<p:column sortBy=“producto.codigo” filterBy=“producto.codigo”>

<f:facet name=“header”>#{msg.codigo}</f:facet>

#{inv.producto.codProducto}

</p:column>

<p:column>

<f:facet name=“header”>Foto</f:facet>

<p:graphicImage id=“photo” value=”#{registrarPedidoController.streamedImageById}" cache=“FALSE”>

<f:param name=“inv” value="#{<a href="http://inv.id">inv.id</a>}" />

</p:graphicImage>

</p:column>

</p:dataTable>
A

Deu certo @Mike!!! consegui trazer tudo na datable!! obrigado mano!!!

Criado 24 de janeiro de 2019
Ultima resposta 26 de jan. de 2019
Respostas 43
Participantes 3