a4j:mediaOutput -> Como eu uso ele para exibir uma imagem do disco/bd?

Pessoal, estou com dificuldades para entender o exemplo da página :

http://livedemo.exadel.com/richfaces-demo/richfaces/mediaOutput.jsf?tab=usage&cid=267499

Como eu posso adaptar esse exemplo para o meu uso, onde pretendo fazer o upload de um arquivo com o rich:fileUpload e após isso, renderizar a imagem no mediaOutput. Esse seria o caso da imagem vinda do disco.

Em outro caso, eu quero pegar a imagem do banco, salva em byte[] (BLOB) e fazer a conversão. A principio estou com dificuldades principalmente na classe MediaBean(em construir o método paint e os argumentos do método…) e a classe MediaData.

No caso, como deveria ser o meu método void paint? Quais argumentos usar. Poderiam dar um exemplo:
A classe MediaBean seria a minha classe do bean onde faço o setLogo() ? Digo, a classe Clube tem um logo (campo byte). Seria nesta classe que eu usaria o paint? Ou na classe de controle da página?

E a classe MediaData devo utilizar a classe do exemplo ou construir uma classe? Neste caso, que atributos deveriam ter esta classe?

Obrigado.

Boa tarde,

Estou com o mesmo problema que o seu, você conseguiu resolver o problema?

Grato.

Com a sua imagem crie um BufferedImage e depois use assim na pagina:

<a4j:mediaOutput createContent="#{bean.getImageFromTimeSeriesChart}"
					mimeType="image/png" element="img" cacheable="false" session="true"
					standby="Carregando gráfico..." />	

e no seu bean crie um metodo com o seguinte formato:


	public void getImageFromTimeSeriesChart(OutputStream out, Object data) {

 byte b[] = carregue os bytes da sua imagem aki.
BufferedImage  result = read(b);
ImageIO.write(result, "png", out);
}

neste metodo eu pego a minha imagem e transformo em um BufferedImage que no caso coloco na variavel result

/**
	 * // Método que transforma um array de bytes em um BufferedImage
	 * 
	 * @author LEANDRO de Godoy
	 * @date 09/08/2010
	 * 
	 * @param bytes
	 * @return
	 */
	public static BufferedImage read(byte[] bytes) {
		try {
			return ImageIO.read(new ByteArrayInputStream(bytes));
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

Qualquer coisa avisa aew.
T+

Então, eu tenho que fazer isso mais em um rich:dataTable e não estou conseguindo passar a imagem, tem ideia de como fazer isso?

Grato.

[quote=fernandosc]Então, eu tenho que fazer isso mais em um rich:dataTable e não estou conseguindo passar a imagem, tem ideia de como fazer isso?

Grato.[/quote]

vc quer exibir a imagem em uma celula do rich:DataTabel?
Bom nunca precisei fazer isso mas acredito que da maneira que descrevi acima seja possivel,faca um teste ai e va postando as duvidas.
pegue os bytes da imagem do banco e trasforme em um bufferedImage e depois faca como demonstrei acima usando a tag a4j:mediaOutPut

Então cara funcionou! Mais eu fiz para uma foto só, agora eu quero exibir em um dataTable que em cada linha vai ter uma foto, alguma idéia?

Obrigado.

Estou tentando passar o byte[] por parametro. Tentei assim:

<rich:dataGrid var="eventoMonitor" value="#{eventoUsMB.listaEventosGeneric}" columns="4" elements="4" id="tabelaMonitor"> <rich:panel style="width: 250px"> <div align="center"> <rich:panel style="border: 1; height: 100px;width: 100px" > <a4j:mediaOutput createContent="#{eventoUsMB.converteImagem}" mimeType="image/jpeg" element="img" cacheable="false" session="true" standby="Carregando imagem..."> <f:param value="#{eventoMonitor.imagem}" name="imagemMonitor"/> </a4j:mediaOutput> </rich:panel>

E no meu MB:

[code]public void converteImagem(OutputStream out, Object data) throws IOException{
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
byte imagem[] = (byte)req.getParameter(“imagemMonitor”);

    BufferedImage result = read(imagem);
    ImageIO.write(result, "jpeg", out);

}[/code]

E não estou conseguindo jogar o parâmetro na imagem[], ele fala que o tipo é incompatível.

Obrigado.

tente usar mimeType=“image/png”

Estou com o mesmo problema, essa solução funcionou ?
:shock:
Revirei a internet e nao consegui resolver meu problema.

Tava quebrando a cabeça aqui resolvendo esse problema
e o código que funcionou direitinho dentro do dataTable comigo foi:

&lt;rich:column&gt;
	&lt;a:mediaOutput element="img" mimeType="image/jpg"
	createContent="#{quoteHome.getBytesImagensDisponiveis}" value="#{category.imagem}" cacheable="false" session="true"
	styleClass="propriedadesDeimagem" /&gt;
&lt;/rich:column&gt;

e na minha Bean

public void getBytesImagensDisponiveis(OutputStream out, Object data) throws IOException {
	String img = (String) data;
	FileInputStream f = new FileInputStream(img);
	BufferedImage result = ImageIO.read(f);
	ImageIO.write(result,"jpeg", out);
}

Lembrando que no data ele já passa o nome da imagem definido no value do a4j:mediaOutput

Abraços… espero ter ajudado