[RESOLVIDO] Exibir imagem fora do contexto do Projeto + JSF 2 + Primefaces 3

21 respostas
L

Fala pessoal…

estou tentando exibir uma imagem que está no servidor fora do contexto da aplicação:

<h:graphicImage value="/home/leonardo/fotos/1/Screenshot-2.png" width="200" height="100"/>

mais apresenta o seguinte erro:

17:56:50,338 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/lugarcerto].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.IllegalStateException: Could not wrap ExternalContext
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:47) [:3.1.0.Final]
	at com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93) [:2.1.6-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:583) [:2.1.6-SNAPSHOT]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:543) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:529) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:455) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:196) [:6.1.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [:6.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContext$Proxy$_$$_WeldClientProxy.setWrapped(SeamExternalContext$Proxy$_$$_WeldClientProxy.java) [:3.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:43) [:3.1.0.Final]
	... 20 more

17:56:50,342 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost]] Exception Processing ErrorPage[errorCode=404, location=/lugarcerto/error/acessonegado.jsf]: java.lang.IllegalStateException: Could not wrap ExternalContext
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:47) [:3.1.0.Final]
	at com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93) [:2.1.6-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:583) [:2.1.6-SNAPSHOT]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:543) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:529) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:455) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:196) [:6.1.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [:6.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContext$Proxy$_$$_WeldClientProxy.setWrapped(SeamExternalContext$Proxy$_$$_WeldClientProxy.java) [:3.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:43) [:3.1.0.Final]
	... 20 more

17:56:50,447 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/lugarcerto].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.IllegalStateException: Could not wrap ExternalContext
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:47) [:3.1.0.Final]
	at com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93) [:2.1.6-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:583) [:2.1.6-SNAPSHOT]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:543) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:529) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:455) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:196) [:6.1.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [:6.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContext$Proxy$_$$_WeldClientProxy.setWrapped(SeamExternalContext$Proxy$_$$_WeldClientProxy.java) [:3.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:43) [:3.1.0.Final]
	... 20 more

17:56:50,449 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost]] Exception Processing ErrorPage[errorCode=404, location=/lugarcerto/error/acessonegado.jsf]: java.lang.IllegalStateException: Could not wrap ExternalContext
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:47) [:3.1.0.Final]
	at com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93) [:2.1.6-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:583) [:2.1.6-SNAPSHOT]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:543) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:529) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:455) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:196) [:6.1.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [:6.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContext$Proxy$_$$_WeldClientProxy.setWrapped(SeamExternalContext$Proxy$_$$_WeldClientProxy.java) [:3.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:43) [:3.1.0.Final]
	... 20 more

só consigo exibir a imagem quando coloco ela dentro do contexto da aplicação…

alguma dica galera?

muito obrigado pela ajuda!

21 Respostas

H

Crie um método para retornar a imagem. http://www.primefaces.org/showcase/ui/dynamicImage.jsf

Não precisa ser uma imagem dinâmica, mas basta retornar um StreamedContent

L

Opa, obrigado pela ajuda!

Mais desta forma, não seria igual a carregar a imagem do banco de dados, não vai consumir muita memória??

Digo isto pois vou carregar um numero grande de imagens…

valeu!

abraço!

jakefrog:
Crie um método para retornar a imagem. http://www.primefaces.org/showcase/ui/dynamicImage.jsf

Não precisa ser uma imagem dinâmica, mas basta retornar um StreamedContent

H

É só ao invés de ler do banco, você ler do disco rígido.
Com relação a desempenho não haverá problemas pois dá no mesmo você mandar ler direto da página ou direto de uma classe. O problema de se ler direto da página arquivos fora do servidor, é que você teria que configurar isso no contexto do seu servidor. [=

L

Obrigado pela ajuda jake! Funcionou!

abraço!

L

fala jake, talvez você possa me ajudar de novo :D

fiz como você falou..mais agora estou tentando exibir várias imagens em um repeat.. mais está dando erro..

populo o meu repeat com um ArrayList

desde já, obrigado pela ajuda!

xhtml
<p:imageSwitch effect="fade">  
				    <ui:repeat value="#{homeBean.retrieveLugaresNovos}" var="imagem">  
				        <p:graphicImage value="imagem" />  
				    </ui:repeat>  
				</p:imageSwitch>
Método:
public ArrayList<StreamedContent> retrieveLugaresNovos() {
		ArrayList<StreamedContent> retorno = null;
		ArrayList<Lugar> lugares = null;
		try {
			lugares = this.lugarController.findUltimosLugaresCadastrados(2);

			for (Lugar lugar : lugares) {
				retorno = this.populaFotosCarregadas(lugar);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return retorno;
	}

	private ArrayList<StreamedContent> populaFotosCarregadas(Lugar lugar) {
		ArrayList<StreamedContent> retorno = new ArrayList<StreamedContent>();
		StreamedContent fotoCarregada = null;
		for (Foto foto : lugar.getFotos()) {
			BufferedImage bufferedImg = new BufferedImage(100, 25,
					BufferedImage.TYPE_INT_RGB);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			try {
				bufferedImg = ImageIO.read(new File(foto.getDsPath()));
				ImageIO.write(bufferedImg, "jpg", baos);
				baos.flush();
				fotoCarregada = new DefaultStreamedContent(
						new ByteArrayInputStream(baos.toByteArray()),
						"image/png");
				baos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			retorno.add(fotoCarregada);
		}
		return retorno;
	}
erro:
13:46:30,514 INFO  [org.apache.coyote.http11.Http11Protocol] Starting Coyote HTTP/1.1 on http-localhost%2F127.0.0.1-8080
13:46:30,529 INFO  [org.apache.coyote.ajp.AjpProtocol] Starting Coyote AJP/1.3 on ajp-localhost%2F127.0.0.1-8009
13:46:30,530 INFO  [org.jboss.bootstrap.impl.base.server.AbstractServer] JBossAS [6.1.0.Final "Neo"] Started in 30s:625ms
13:46:44,157 WARN  [org.jboss.weld.integration.ejb.JBossSessionObjectReference] Cannot remove EJB, id unknown (likely because this is a no-interface view!)
13:46:44,210 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/lugarcerto].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.IllegalStateException: Could not wrap ExternalContext
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:47) [:3.1.0.Final]
	at com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93) [:2.1.6-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:583) [:2.1.6-SNAPSHOT]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:543) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:529) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:455) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:196) [:6.1.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [:6.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContext$Proxy$_$$_WeldClientProxy.setWrapped(SeamExternalContext$Proxy$_$$_WeldClientProxy.java) [:3.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:43) [:3.1.0.Final]
	... 20 more

13:46:44,215 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost]] Exception Processing ErrorPage[errorCode=404, location=/lugarcerto/error/acessonegado.jsf]: java.lang.IllegalStateException: Could not wrap ExternalContext
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:47) [:3.1.0.Final]
	at com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93) [:2.1.6-SNAPSHOT]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:583) [:2.1.6-SNAPSHOT]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:543) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [:6.1.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:529) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:455) [:6.1.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:196) [:6.1.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_26]
Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped
	at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) [:6.1.0.Final]
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87) [:6.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContext$Proxy$_$$_WeldClientProxy.setWrapped(SeamExternalContext$Proxy$_$$_WeldClientProxy.java) [:3.1.0.Final]
	at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.java:43) [:3.1.0.Final]
	... 20 more
L

parece que não rola utilizar StreamedContent para repeat

e agora?

R

Bom dia Galera,

Alguem conseguiu resolver este problema, se conseguiram por favor postem o codigo ou o link do tutorial, por favor se alguem puder ajudar eu agradeço.

Estou usando: JSF 2 e Primefaces 3

L

resoig:
Bom dia Galera,

Alguem conseguiu resolver este problema, se conseguiram por favor postem o codigo ou o link do tutorial, por favor se alguem puder ajudar eu agradeço.

Estou usando: JSF 2 e Primefaces 3

opa, blz?

tem dois problemas no tópico… qual o seu problema?

Exibir uma imagem fora do contexto da aplicação?

se for este, basta usar esse exemplo: http://www.primefaces.org/showcase/ui/dynamicImage.jsf

tem que fazer um método para retornar um objeto StreamedContent…

só tem um porém… deste modo não consigo utilizar a imagem dentro de um repeat…

abraço

R

resoig:
Bom dia Galera,

Alguem conseguiu resolver este problema, se conseguiram por favor postem o codigo ou o link do tutorial, por favor se alguem puder ajudar eu agradeço.

Estou usando: JSF 2 e Primefaces 3

Consegui resolver este problema de renderização das imagens usando a tag <p:graphicImage>, segue abaixo detalhes crucias para o bom funcionamento:

  • 1º Este componente não funciona se vc usar a variavel de interação nele, este componente (<p:graphicImage>) pode até estar dentro de outro componente (EX: <p:dataGrid>) que use esta variavel de interação, mas ele (<p:graphicImage>) não pode fazer uso da mesma;

  • 2º Para um funcionamento adequado, deve ser desenvolvido um MB individual para carregamento da imagem;

  • 3º um paramentro deve ser passado quando a imagem é rederizada atraves da tag <f:param>;

  • 4º O scopo não pode ser View conforme documentação do Prime, e ao contraria do que muitas pessoas estão falando pelos foruns, o scopo pode ser RESQUEST sim, não precisa ser SESSION.

  • 5º Não desanimem, rsrsrs, passei 3 semanas tentando resolver apenas este problema.

Bem é isso ai pessoal, no meu caso só precisar copiar o MB (PhotoStreamer) que trata imagem deste tutorial fiz umas alterações para minha aplicação e foi tranquilo.

R

LeoCBS:
resoig:
Bom dia Galera,

Alguem conseguiu resolver este problema, se conseguiram por favor postem o codigo ou o link do tutorial, por favor se alguem puder ajudar eu agradeço.

Estou usando: JSF 2 e Primefaces 3

opa, blz?

tem dois problemas no tópico… qual o seu problema?

Exibir uma imagem fora do contexto da aplicação?

se for este, basta usar esse exemplo: http://www.primefaces.org/showcase/ui/dynamicImage.jsf

tem que fazer um método para retornar um objeto StreamedContent…

só tem um porém… deste modo não consigo utilizar a imagem dentro de um repeat…

abraço

Então LeoCBS,

Consegui resolver este problema, e usei o graphicImage dentro de um DataGrid funcionou de boa, da uma olhada nas dicas do meu post ai, qlq coisa da um toq, flw.

L

obrigado pela ajuda resoig

vou testar aqui, depois posto o resultado

abraço!

L

fala resoig,

meu param ta indo null.. alguma dica?

<h:form>
	      <ul class="newslist">
		    <ui:repeat value="#{lugarBean.retrieveLugaresNovos}" var="lugar">
		        <li> <h:outputLabel id="titulo" value="#{lugar.nmLugar}" /> </li>
		        <h:outputLabel id="ptPositivo" value="#{lugar.ptPositivo}" />
		        <br/>
		        <h:outputLabel id="ptNegativo" value="#{lugar.ptNegativo}" />
		        <br/>
		        <p:rating disabled="true" value="#{lugar.qualificacao}"/>
		        <br/>
		         <h:outputLabel id="teste" value="#{lugar.idLugar}"/>
		        <p:graphicImage value="#{homeBean.foto}">
			    	<f:param id="idLugar" name="idLugar" value="#{lugar.idLugar}"/>
			    </p:graphicImage>
				<br/>
		        <h:commandLink value="Ver mais.." />
		        <br/>
		    </ui:repeat>  
	      </ul>
      </h:form>
MBean:
package br.com.lugarcerto.view;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import org.primefaces.model.StreamedContent;

import br.com.lugarcerto.business.local.LugarBBusinessLocal;

@Named("homeBean")
@SessionScoped
public class HomeBean extends LugarCertoBean {

	@EJB
	private LugarBBusinessLocal lugarController;

	private StreamedContent foto;

	public StreamedContent getFoto() {
		ExternalContext externalContext = FacesContext.getCurrentInstance()
				.getExternalContext();
		String idLugar = externalContext.getRequestParameterMap()
				.get("idLugar");

		return this.lugarController.retornaImagemHome(new Long(idLugar));
	}

	public void setFoto(StreamedContent foto) {
		this.foto = foto;
	}

}
L

nem com valor fixo no value do param está indo!!!

<h:form>
	      <ul class="newslist">
		    <ui:repeat value="#{lugarBean.retrieveLugaresNovos}" var="lugar">
		        <li> <h:outputLabel id="titulo" value="#{lugar.nmLugar}" /> </li>
		        <h:outputLabel id="ptPositivo" value="#{lugar.ptPositivo}" />
		        <br/>
		        <h:outputLabel id="ptNegativo" value="#{lugar.ptNegativo}" />
		        <br/>
		        <p:rating disabled="true" value="#{lugar.qualificacao}"/>
		        <br/>
		         <h:outputLabel id="teste" value="#{lugar.idLugar}"/>
		        <p:graphicImage value="#{homeBean.foto}">
			    	<f:param id="leo" name="leo" value="leo"/>
			    </p:graphicImage>
				<br/>
		        <h:commandLink value="Ver mais.." />
		        <br/>
		    </ui:repeat>  
	      </ul>
      </h:form>

MBean:

package br.com.lugarcerto.view;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import org.primefaces.model.StreamedContent;

import br.com.lugarcerto.business.local.LugarBBusinessLocal;

@Named("homeBean")
@SessionScoped
public class HomeBean extends LugarCertoBean {

	@EJB
	private LugarBBusinessLocal lugarController;

	private StreamedContent foto;

	public StreamedContent getFoto() {
		ExternalContext externalContext = FacesContext.getCurrentInstance()
				.getExternalContext();
		String photoId = externalContext.getRequestParameterMap().get("leo");

		// return this.lugarController.retornaImagemHome(new Long(idLugar));
		return null;
	}

	public void setFoto(StreamedContent foto) {
		this.foto = foto;
	}

}
R
LeoCBS:
nem com valor fixo no value do param está indo!!!
<h:form>
	      <ul class="newslist">
		    <ui:repeat value="#{lugarBean.retrieveLugaresNovos}" var="lugar">
		        <li> <h:outputLabel id="titulo" value="#{lugar.nmLugar}" /> </li>
		        <h:outputLabel id="ptPositivo" value="#{lugar.ptPositivo}" />
		        <br/>
		        <h:outputLabel id="ptNegativo" value="#{lugar.ptNegativo}" />
		        <br/>
		        <p:rating disabled="true" value="#{lugar.qualificacao}"/>
		        <br/>
		         <h:outputLabel id="teste" value="#{lugar.idLugar}"/>
		        <p:graphicImage value="#{homeBean.foto}">
			    	<f:param id="leo" name="leo" value="leo"/>
			    </p:graphicImage>
				<br/>
		        <h:commandLink value="Ver mais.." />
		        <br/>
		    </ui:repeat>  
	      </ul>
      </h:form>
MBean:
package br.com.lugarcerto.view;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import org.primefaces.model.StreamedContent;

import br.com.lugarcerto.business.local.LugarBBusinessLocal;

@Named("homeBean")
@SessionScoped
public class HomeBean extends LugarCertoBean {

	@EJB
	private LugarBBusinessLocal lugarController;

	private StreamedContent foto;

	public StreamedContent getFoto() {
		ExternalContext externalContext = FacesContext.getCurrentInstance()
				.getExternalContext();
		String photoId = externalContext.getRequestParameterMap().get("leo");

		// return this.lugarController.retornaImagemHome(new Long(idLugar));
		return null;
	}

	public void setFoto(StreamedContent foto) {
		this.foto = foto;
	}

}

Opa amigo,

Uma pergunta:

- O metodo retrieveLugaresNovos esta retornando a lista de lugares? se os outputlabel estão renderizando com as informações é porque esta.

Caso esteja retornando a lista de lugares, tente desta forma:

public StreamedContent getFoto() {

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest myRequest = (HttpServletRequest) context.getExternalContext().getRequest();
String lugarID = (String) myRequest.getParameter("idLugar");

return new DefaultStreamedContent(new ByteArrayInputStream(metodoQueRetornaByteArray(lugarID)), "image/png"
}

Dois detalhes que observei em seu codigo:

- Esse parametro (idLugar) servi para resgatarmos a imagem no segundo request que este componente GraphicImage realiza, e pelo que observei, seu codigo não esta usando a variavel (photoId ) que guarda o valor do parametro, neste exemplo que passei para vc, veja que usei o parametro para buscar uma imagem do tipo StreamedContent atraves do metodo "metodoQueRetornaByteArray".

- essa sua linha de codigo "return this.lugarController.retornaImagemHome(new Long(idLugar));" esta retornando um StreamedContent?

Depois posta o resultado ai, flw!!!

L

fala resoig


Uma pergunta:

  • O metodo retrieveLugaresNovos esta retornando a lista de lugares? se os outputlabel estão renderizando com as informações é porque esta.

sim, está retornando uma List e o componente repeat renderiza os atributos com sucesso.

O meu método return this.lugarController.retornaImagemHome(new Long(idLugar)); retorna um StreamedContent…

A lógica do metodo está ok… o problema é o param “idLugar”… não consigo pegar ele no método… ele vem sempre null…

L

posta ai como ficou teu xhtml, por favor…

L

esse código não pega o idLugar, retorna null

ExternalContext externalContext = FacesContext.getCurrentInstance() .getExternalContext(); String idLugar = externalContext.getRequestParameterMap().get( "id_lugar");

L

consegui pegar o id da imagem via <f:attribute

<p:graphicImage value="#{homeBean.foto}"> <f:attribute name="idLugar" value="#{lugar.idLugar}" /> </p:graphicImage>

mais ta dando erro ao renderizar a imagem… :frowning:

tem um detalhe no código… se removo esse trecho de código ( (Long) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get(“idLugar”);

o imagem é renderizada…porqueeee?? :frowning:

21:07:58,096 SEVERE [org.primefaces.application.PrimeResourceHandler] Error in streaming dynamic resource.

Meu MBean:

public StreamedContent getFoto() { Long idLugar = (Long) UIComponent .getCurrentComponent(FacesContext.getCurrentInstance()) .getAttributes().get("idLugar"); Foto foto = null; if (idLugar != null) { foto = this.lugarController.retornaImagemHome(idLugar); } //se removo o codigo acima a imagem é redenrizada!! BufferedImage bufferedImg = new BufferedImage(100, 25, BufferedImage.TYPE_INT_RGB); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { bufferedImg = ImageIO.read(new File(foto.getDsPath())); ImageIO.write(bufferedImg, "jpg", baos); baos.flush(); } catch (IOException e) { e.printStackTrace(); } return new DefaultStreamedContent(new ByteArrayInputStream( baos.toByteArray()), "image/png"); }

L

Fala resoig

só consegui exibir minha imagem através de um Servlet

link do tutorial:
http://balusc.blogspot.com.br/2007/04/imageservlet.html#ImageServletServingFromDatabase
http://stackoverflow.com/questions/2848964/how-do-i-load-an-image-from-a-db-inside-a-jsf-page-using-managed-beans

segue o código do meu Servlet, tive que fazer uma adaptação para pegar a imagem do disco invés de buscar do BD..

protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		Long idLugar = Long.valueOf(request.getPathInfo().substring(1));
		Foto foto = null;
		Context ctx;
		try {
			ctx = new InitialContext();
			LugarBBusinessLocal bean = (LugarBBusinessLocal) ctx
					.lookup(LugarBBusinessLocal.JNDI_NAME);
			foto = bean.retornaImagemHome(idLugar);
		} catch (NamingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		BufferedImage bufferedImg = new BufferedImage(100, 25,
				BufferedImage.TYPE_INT_RGB);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		File imgFile = new File(foto.getDsPath());
		try {
			bufferedImg = ImageIO.read(imgFile);
			ImageIO.write(bufferedImg, "jpg", baos);
			baos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

		response.setHeader("Content-Type",
				getServletContext().getMimeType(imgFile.getName()));
		response.setHeader("Content-Length", imgFile.length() + "");
		response.setHeader("Content-Disposition", "inline; filename=\""
				+ imgFile.getName() + "\"");

		BufferedInputStream input = null;
		BufferedOutputStream output = null;
		InputStream is = new ByteArrayInputStream(baos.toByteArray());

		try {
			input = new BufferedInputStream(is);
			output = new BufferedOutputStream(response.getOutputStream());
			byte[] buffer = new byte[8192];
			int length;
			while ((length = input.read(buffer)) > 0) {
				output.write(buffer, 0, length);
			}
		} finally {
			if (output != null)
				try {
					output.close();
				} catch (IOException logOrIgnore) {
				}
			if (input != null)
				try {
					input.close();
				} catch (IOException logOrIgnore) {
				}
		}

	}

resoig, obrigado pela ajuda

R
LeoCBS:
Fala resoig

só consegui exibir minha imagem através de um Servlet

link do tutorial:
http://balusc.blogspot.com.br/2007/04/imageservlet.html#ImageServletServingFromDatabase
http://stackoverflow.com/questions/2848964/how-do-i-load-an-image-from-a-db-inside-a-jsf-page-using-managed-beans

segue o código do meu Servlet, tive que fazer uma adaptação para pegar a imagem do disco invés de buscar do BD..

protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		Long idLugar = Long.valueOf(request.getPathInfo().substring(1));
		Foto foto = null;
		Context ctx;
		try {
			ctx = new InitialContext();
			LugarBBusinessLocal bean = (LugarBBusinessLocal) ctx
					.lookup(LugarBBusinessLocal.JNDI_NAME);
			foto = bean.retornaImagemHome(idLugar);
		} catch (NamingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		BufferedImage bufferedImg = new BufferedImage(100, 25,
				BufferedImage.TYPE_INT_RGB);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		File imgFile = new File(foto.getDsPath());
		try {
			bufferedImg = ImageIO.read(imgFile);
			ImageIO.write(bufferedImg, "jpg", baos);
			baos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

		response.setHeader("Content-Type",
				getServletContext().getMimeType(imgFile.getName()));
		response.setHeader("Content-Length", imgFile.length() + "");
		response.setHeader("Content-Disposition", "inline; filename=\""
				+ imgFile.getName() + "\"");

		BufferedInputStream input = null;
		BufferedOutputStream output = null;
		InputStream is = new ByteArrayInputStream(baos.toByteArray());

		try {
			input = new BufferedInputStream(is);
			output = new BufferedOutputStream(response.getOutputStream());
			byte[] buffer = new byte[8192];
			int length;
			while ((length = input.read(buffer)) > 0) {
				output.write(buffer, 0, length);
			}
		} finally {
			if (output != null)
				try {
					output.close();
				} catch (IOException logOrIgnore) {
				}
			if (input != null)
				try {
					input.close();
				} catch (IOException logOrIgnore) {
				}
		}

	}

resoig, obrigado pela ajuda

Fala Leo,

Então mano, vc testou esse metodo GET no seu MB que retorna a imagem?

public StreamedContent getFoto() { 

FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletRequest myRequest = (HttpServletRequest) context.getExternalContext().getRequest(); 
String lugarID = (String) myRequest.getParameter("idLugar"); 

return new DefaultStreamedContent(new ByteArrayInputStream(metodoQueRetornaByteArray(lugarID)), "image/png" 
}
L

testei sim resoig…

pra mim esse código (String) myRequest.getParameter(“idLugar”); sempre retorna null…

por isso fiz um Servlet

obrigado ae pela ajuda!

abraço!

Criado 30 de março de 2012
Ultima resposta 6 de abr. de 2012
Respostas 21
Participantes 3