Tenho array de bytes converter em imagem e exibir na pagina JSF

9 respostas
D

Boa Tarde, pessoall

Stuação é a seguinte tenho um array de bytes e gostaria de alguma maneira transforma-lo em um objeto que representasse uma Imagem
e exibi-lo na tela que usa JSF.De preferência sem gravação de arquivos em disco.

Isto é possivel??

Agradeço qualquer sugestão.

9 Respostas

A

A primeira coisa que veio na minha cabeça é vc criar a imagem como um arquivo temporario, e passar o caminho para sua pagina JSF.

T

Talvez não seja uma boa ideia…
Está usando richfaces? se sim converta o vetor de bytes em um Image (ou ImageBuffer, nao me lembro) e use o componente do richfaces MediaOutPut.

D

Estou usando RichFaces sim, vou olhar este componente.

A

Tb irei, não conhecia, obrigado !

T

Ele ajuda pra caramba, ainda mais pq você não precisa gravar o arquivo em disco e tudo mais, você joga direto o Image nele.
Dizem que ele tbm exibe pdf, mas nunca consegui fazer e em todos os foruns que encontrei ninguem nunca conseguiu tbm , então ainda é lenda pra mim hehehe

Se tiverem duvidas postem ae que ajudo no que for possível.

P

Tchello!

Cara, me dê uma ajuda, por favor. Já briguei (e muito) com este componente, a4j:mediaOutput. Consegui utilizá-lo, porém só consigo renderizar uma imagem (em bytes) se o tamanho da imagem for muito pequeno!

Se a imagem tiver o tamanho acima de 14kb, ele gera o seguinte erro:

GRAVE: Unblocking keep-alive exception
java.lang.IllegalArgumentException: Request header is too large
        at com.sun.grizzly.tcp.http11.InternalInputBuffer.fill(InternalInputBuffer.java:756)
        at com.sun.grizzly.tcp.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:458)
        at com.sun.grizzly.http.ProcessorTask.parseRequest(ProcessorTask.java:821)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:659)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:662)

E aí, alguma sugestão? Estou usando um manageBean com scopo de session, mas testei com request e deu certo também, apenas para exibir a imagem pequena, no entanto como disse, imagens grandes me dá este erro.

Meu objetivo eh criar um slid show dinâmico. Voce teria alguma sugestão para isto? Obrigado.

T

Então cara, nunca tive esse problema.

Será que não há alguma configuração no web.xml ou no facesconfig.xml pra aumentar esse limite? Provavelmente deve haver algo alí…

O slide show vc pode fazer com o a4j:poll, tipo um timer pra mudar de imagem. O que vc tava pensando em usar pra isso?

Abraços.

P

Em um outro tópico que criei perguntei como poderia fazer, me sugeriram o ImageSwitch do primefaces, mas aquilo lá é bugado demais! Voce já testou? Eu tentei seguir o exemplo deles lá e gera uma exception de cast, muito louco.

Bom, como ele não deu certo resolvi tentar algo diferente.

Deixa eu te explicar: Meu slideshow vai ser dinamico, ou seja, eu vou estar sempre criando um ArrayList de objetos Imagem, que criei, que tem alguns atributos mas vou listar 3 somente: byte[] arquivo, String link, e String descricao, o arquivo é a imagem em bytes (blob), o link é um link anexado a imagem, voce já vai entender, e a descrição é auto explicativa.

Meu slide show deve trabalhar com esse ArrayList que falei, as imagens devem ficar mudando, de preferência com um Fade in como efeito. A minha dúvida é como fazer com que isso fique dinamico no sentido de rotacionar as imagens. Tente com a4j repeat mas ele faz tipo uma lista na tela hehehe. Preciso que a imagem mude no mesmo lugar onde a outra estava!

Bem, quando o usuário clica na imagem que está aparecendo, o site deve abrir uma nova janela redirecionando par ao link da imagem, entendeu? Me sugeriram Jquery, mas eu manjo nada disso, só o basicão mesmo. Voce teria alguma sugestão? Como voce faria usando a solução que me indicou? Pode me passar um codigo bem simples? Obrigado!

T

Então, a idéia ainda precisa ser mais lapidada. Só fazendo testes e mais testes pra chegar na fórmula mais bonitinha mesmo.

Como disse acima, procure o a4j:poll, ele cria uma espécie de timer, daí você pode alternar de uma imagem para outra de tempos em tempos, compreende?
Mas esse componente é somente um de vários recursos que você vai precisar. Agora é botar a mão na massa e colher dados pra saber o que se encaixa melhor no seu cenário.

Claro, não esqueça de ir postando aqui =P

Abraços!

Criado 4 de fevereiro de 2010
Ultima resposta 23 de out. de 2010
Respostas 9
Participantes 4