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

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!

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

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!

[quote=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[/quote]

É 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. [=

Obrigado pela ajuda jake! Funcionou!

abraço!

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

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:

[code]public ArrayList retrieveLugaresNovos() {
ArrayList retorno = null;
ArrayList 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;
}[/code]

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

parece que não rola utilizar StreamedContent para repeat

e agora?

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

[quote=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[/quote]

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

[quote=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[/quote]

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.

1 curtida

[quote=LeoCBS][quote=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[/quote]

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[/quote]

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.

obrigado pela ajuda resoig

vou testar aqui, depois posto o resultado

abraço!

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:

[code]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;
}

}[/code]

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

}

[quote=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:

[code]
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;
}

}
[/code][/quote]

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

fala resoig

[quote]
Uma pergunta:

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

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…

posta ai como ficou teu xhtml, por favor…

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

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

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

Fala resoig

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

link do tutorial:


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…

[code]
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) {
			}
	}

}[/code]

resoig, obrigado pela ajuda