Mostrar imagem fora do contexto do projeto

Preciso mostrar uma imagem que está fora do contexto do projeto, ou seja, está armazenado em local físico fora do projeto. Acontece que a imagem não está sendo visualizada, mesmo passando o diretório completo. Alguém sabe como fazer isso utilizando o lightbox do primefaces ou algum outro componente? Agradeço a ajuda.

<p:lightBox styleClass="imagebox"> <h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}"> <h:graphicImage value="Foto"/> </h:outputLink> </p:lightBox>

Faz como esse exemplo do primefaces.

File file = new File("O caminho da imagem em seu computador"); InputStream inputStream = new FileInputStream(file); StreamedContent content = new DefaultStreamedContent(inputStream, "o tipo mime da imagem", "o nome da imagem"); // Ex: // StreamedContent content = new DefaultStreamedContent(inputStream, "image/jpeg", "foto-1234.jpg");

<p:graphicImage value="#{meuBean.oStreamContentCriadoNoBean}" />  

http://www.primefaces.org/showcase-labs/ui/dynamicImage.jsf

Como ficaria isso na visão(.jsf/.xhtml)?

Como está sua página?

[code]<p:lightBox styleClass=“imagebox”>
<h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}">
<h:graphicImage value=“Foto”/>

					</h:outputLink> 

</p:lightBox>[/code]

Vou tentar com o File

Acontece que através da visão eu passo por parâmetro o caminho da imagem, o método verifica esse caminho e retorna um StreamedContent, mas como vou retornar isso de novo para a visão?

Aqui é sua imagem, nomeCompletoArquivo?

<h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}"> 

É o caminho físico em disco da imagem

Isso não resolve?

De:

<h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}"> <h:graphicImage value="Foto"/> </h:outputLink>
Para:

<p:graphicImage value="#{documento.binarioArquivo}" />

Onde o binarioArquivo é um StreamedContent criado com o conteúdo do arquivo.

Se o #{documento} não for um ManagedBean vc pode chamar um método que retorna o conteúdo.

<p:graphicImage value="#{documentoBean.getBinarioArquivo(documento.nomeCompletoArquivo)}" />

Testei dessa forma já, passei o StreamedContent através do método, mas sem resultados…acredito que é alguma coisa de diretório que a página não reconhece. porque pelo navegador acesso a imagem normalmente através do diretorio comum e um “file:///” antes. Tentei concatenar esse file:/// junto com o diretório, mesmo assim…
Acredito que será complicado encontrar uma forma de resolver isso com os arquivos estando fora do contexto do projeto.

Me passa o texto do #{documento.nomeCompletoArquivo}.

Consegui fazer usando um comandLink

[code]public void mostrarDocumentoEmDisco(String caminho) {
final HttpServletResponse res = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
res.setContentType(“image/jpg”);
res.setHeader(“Content-disposition”, “inline;filename=documento.jpg”);

	try {
		InputStream stream = new FileInputStream(caminho);
		res.getOutputStream().write(IOUtils.toByteArray(stream));
	} catch (IOException e) {
		e.printStackTrace();
	}
	res.getCharacterEncoding();
	FacesContext.getCurrentInstance().responseComplete();

	}[/code]

Só que dessa forma ele visualiza em outra página, isso já me serve, porém queria fazer de uma forma mais elegante, abrindo a imagem na mesma tela através de um p:dialog