[RESOLVIDO]Galleria primefaces 6.1 não exibe as imagens!

Boa noite pessoal, já tentei de várias formas mas não exibe as imagens!
Copiei exatamente esse código e não funciona. As imagens estão na pasta, porém não são exibidas. Tenho 4 imagens na pasta e elas aparecem em “branco”

public List<String> getImagens(){
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ServletContext scontext = (ServletContext) 
   facesContext.getExternalContext().getContext();        

    File pastaImagensTopo = new File(scontext.getRealPath("/uploads/imagensTopo/"));
    if(!pastaImagensTopo.exists())pastaImagensTopo.mkdirs();
    File[] arquivos = pastaImagensTopo.listFiles();
    ArrayList imagens=new ArrayList();
    for(File arquivo : arquivos){
        if(arquivo.isFile()){
            String ext=arquivo.getName().substring(arquivo.getName().lastIndexOf(".")).toLowerCase();
            if(ext.equals(".jpg")||ext.equals(".jpeg")||ext.equals(".bmp")||ext.equals(".gif")||ext.equals(".png")){
                imagens.add("/uploads/imagensTopo/"+arquivo.getName());
            }
        }
    }
    return imagens ;
}

Dentro do TabView tenho o seguinte código

<p:tab id="tabListaImagem" title="Lista Imagens">
  <h:form id="formListaImagem">
     <p:galleria value="#{imagemPacienteControlador.imagens}" var="imagem"> 											
        	<p:graphicImage value="#{imagem}"/>
   	    </p:galleria>
   	</h:form>																				 
</p:tab>

Alguém poderia me dar uma força pois não sei o que estar acontecendo…

Olá @Vinicius.bc

Eu não sei se foi erro de CTRL C e CTRL V, mas faltou fechar a tag galleria antes de graphicImage

Olá @Mike,então, no projeto estar correto. Foi um erro ao copiar o código quando criei a postagem.
Quando uso <p:galleria> simplesmente não aparece as imagens. Se na pasta tiver 5 imagens aparece as 5 em branco.

Você pode postar uma print de como esta as suas pastas?

Só agora consegui fazer uns testes mas ainda continua sem exibir a imagem!
Eu quero exibir as imagens na unidade C:\imgPacientes(parte fixa)\nomePaciente\imagem
1 - Crie um método que retorna StreamedContent
2 - coloquei esse médoto no <p:graphicImage value="#{#{imagemPacienteControlador.mostraFoto1}" cache="false"/> Sem o a tag <p:galleria> exibe a foto. quando uso a galleria fica em branco.

aqui utilizado direto no p:graphicImage exibe a imagem

public StreamedContent getMostraFoto1() {
	File foto = new File("C:\\imgPacientes\\2-Vinicius\\Koala.jpg");
	DefaultStreamedContent content = null;
	try {
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(foto));
		byte[] bytes = new byte[in.available()];
		in.read(bytes);
		in.close();
		content = new DefaultStreamedContent(new ByteArrayInputStream(bytes), "image/jpeg");
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
	return content;
}

Assim exibe

<p:tab id="tabListaImagem" title="Lista Imagens">	
    <h:form id="formListaImagem">													
           <p:graphicImage  value="#{imagemPacienteControlador.mostraFoto1}" cache="false"/>           										 	
    </h:form>													
</p:tab>

Tentei criar um método que retorne List<StreamedContent>. Não exibe…

<p:galleria value="#{imagemPacienteControlador.mostraFotoLocal2()()}" var="imagem">
          <p:graphicImage  value="#{imagem}" cache="false"/>
 </p:galleria>

Veja se esse tópico não te ajuda:

Eu falei para você postar como esta a sua árvore de pastas pq eu copiei o seu código aqui e deu certo…

Basicamente, a pasta que você referencia em getRealPath deve existir dentro de WebContent

Boa noite @Mike. já mexi e continua sem exibir a imagem.
Não envie a estrutura da árvore de pastas pois quero ler uma pasta fora do contexto da aplicação: C:\imgPaciente\vinicius\koala.jpg, por exemplo.

No banco eu salvo o caminho:C:\imgPaciente\vinicius\koala.jpg
retorna List da minha entidade.

 public List<ImagemPaciente> atualizaListaImagem() {
	imagensPaciente = new ArrayList<ImagemPaciente>();
	FacesContext context = FacesContext.getCurrentInstance();
	Application application = context.getApplication();
	PacienteControlador pacienteControlador = application.evaluateExpressionGet(context, "#{pacienteControlador}",
			PacienteControlador.class);

	if ((pacienteControlador.getPaciente().getId() != null)) {
		Paciente pacienteSelecionado = pacienteServico
				.recuperaPacienteID(pacienteControlador.getPaciente().getId());
		String subPasta = pacienteSelecionado.getId() + "-" + pacienteSelecionado.getNome();		
		File diretorio = new File("c:\\imgPacientes\\" + subPasta + "\\");

		if (!diretorio.exists()) {
			diretorio.mkdirs(); 									
		}
		
		imagensPaciente = imagemServico.listaImagensPorPaciente(pacienteSelecionado.getId());
		
	}
	return imagensPaciente;
}

como estou tentando chamar o p:galleria dentro de um p:tabviewchamo esse evento ao clicar no tab que deveria listar as imagens e retornar a minha lista.

public void onTabChangeImagens(TabChangeEvent event) {
	TabView tabView = (TabView) event.getComponent();
	int activeTabIndex = tabView.getActiveIndex();		
	if (activeTabIndex == 1) {
		atualizaListaImagem();
	}
}

Aqui deveria retornar a imagem…

public StreamedContent getMostraFotoLocal2(String descricao) {		
	FacesContext context = FacesContext.getCurrentInstance();	
	DefaultStreamedContent content = null;		
	System.out.println("CICLO DE VIDA DO JSF "+context.getCurrentPhaseId());	
	
	for (ImagemPaciente anexo : imagensPaciente) {		
			System.out.println("Verificando diretorio  " + anexo.getDiretorioImagem());
			File caminho = new File(descricao);				
			try {
				System.out.println("Caminho no render "+caminho);
				BufferedInputStream in = new BufferedInputStream(new FileInputStream(caminho));
				byte[] bytes = new byte[in.available()];
				in.read(bytes);
				in.close();
				content =  new DefaultStreamedContent(new ByteArrayInputStream(bytes), "image/jpeg");	
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}			
	}		
	return content;			
}

Essa descrição seria: C:\imgPaciente\vinicius\koala.jpg

Na minha página:

<p:tab id="tabListaImagem" title="Lista Imagens">
	<h:form id="formListaImagem">
		<p:galleria value="#{imagemPacienteControlador.atualizaListaImagem()}" var="imagem" panelHeight="200" panelWidth="300"> 
            <p:graphicImage  value="#{imagemPacienteControlador.getMostraFotoLocal2(imagem.diretorioImagem)}" cache="false">                										  	              											
           </p:graphicImage>
         </p:galleria>		                									
     </h:form>	

Só que agora ao pesquisar e selecionar o paciente dá o seguinte erro:

CICLO DE VIDA DO JSF RENDER_RESPONSE 6
Verificando diretorio  c:\imgPacientes\vinicius\Koala.jpg
vou pegar o contetn  c:\imgPacientes\vinicius\Koala.jpg
Caminho no render c:\imgPacientes\vinicius\Koala.jpg
Verificando diretorio  c:\imgPacientes\vinicius\Penguins.jpg
vou pegar o contetn  c:\imgPacientes\vinicius\Penguins.jpg
Caminho no render c:\imgPacientes\vinicius\Koala.jpg
fev 28, 2019 7:24:55 PM com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit
GRAVE: java.io.IOException: javax.el.PropertyNotFoundException: /paginas/paciente/cadastraPaciente.xhtml @4959,139 value="#{imagemPacienteControlador.getMostraFotoLocal2(imagem.diretorioImagem)}": Property [getMostraFotoLocal2] not found on type [br.com.f2v.gestorOdontologico.controladores.ImagemPacienteControlador]
fev 28, 2019 7:24:55 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/paginas/paciente/cadastraPaciente.xhtml]
javax.faces.FacesException: java.io.IOException: javax.el.PropertyNotFoundException: /paginas/paciente/cadastraPaciente.xhtml @4959,139 value="#{imagemPacienteControlador.getMostraFotoLocal2(imagem.diretorioImagem)}": Property [getMostraFotoLocal2] not found on type [br.com.f2v.gestorOdontologico.controladores.ImagemPacienteControlador]	

Tentei f:param passando a descrição e veio null Como listo ao clicar na aba sempre retorna Render_Response

Se puder ajudar fico grato. Já estou com dor de cabeça rsrsrsrs

Boa noite @Vinicius.bc

Tenta aplicar o post #37 do link que eu postei, possivelmente dará certo

Basicamente você teria que verificar em que fase do ciclo de vida o JSF esta e então retornar a imagem. O estranho é que esta acusando que não existe a propriedade getMostraFotoLocal2, mas você esta chamando um método…

Eu não to com o meu notebook agora, se não tentaria te ajudar com o código

Olá, @Mike.
Consegui exibir as imagens utilizando p:galleria. Obrigado pela ajuda. :smile:
Seguindo o post #37 que você me passou. vlw