Problemas Renderizar imagem (Error in streaming dynamic resource.)

4,684 views
Skip to first unread message

YURI NUNES CARDOSO

unread,
Dec 27, 2011, 9:48:02 AM12/27/11
to javasf: JavaServer Faces Group
Olá pessoal,

Estou com um erro na hora de mostrar a imagem. Ela chega certinho, mas
na hora de mostrar ocorre o seguinte erro:

Nenhum tipo de mime pôde ser encontrado para o arquivo
dynamiccontent. Para resolver isso, adicione um mapeamento de mime-
type ao web.xml do aplicativo.
Error in streaming dynamic resource.

Alguém já viu isso?

Grato.

Douglas

unread,
Dec 27, 2011, 10:41:07 AM12/27/11
to jav...@googlegroups.com
Por favor coloque o código que está utilizando


--
Você recebeu esta mensagem por que é membro do  Javasf
http://groups.google.com/group/javasf

Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
Douglas

"O homem não teria alcançado o possível se, repetidas vezes, não tivesse
tentado o impossível." Max Weber

YURI NUNES CARDOSO

unread,
Dec 27, 2011, 10:42:47 AM12/27/11
to jav...@googlegroups.com
MB que devolve a imagem:

public StreamedContent getImagemCategoria() {
        if (categoria != null && categoria.getImagem() != null) {
            imagemCategoria = new DefaultStreamedContent(new ByteArrayInputStream(categoria.getImagem()));
        }
        return imagemCategoria;
    }

Parte da página xhtml que recebe:

<h:panelGroup id="textoGroup" rendered="#{categoriaMBean.mostrarTexto}">
                <h:panelGrid columns="4">   
                    <h:outputText value="Campos: " />
                    <p:commandButton value="Email" action="#" ajax="false" style="margin-left: 40px;" />
                    <p:commandButton value="Nome" action="#" ajax="false" />
                    <p:commandButton value="ID" action="#" ajax="false" />
                </h:panelGrid>
               
                <h:panelGrid>
                    <p:editor value="#{categoriaMBean.categoria.modelo}" />
                </h:panelGrid>
            </h:panelGroup>
           
            <p:graphicImage value="#{categoriaMBean.imagemCategoria}" />

Obrigado Douglas.

Douglas

unread,
Dec 27, 2011, 11:01:08 AM12/27/11
to jav...@googlegroups.com
Yuri boa tarde,

Utilize assim:

new DefaultStreamedContent(new ByteArrayInputStream(categoria.getImagem()), "image/jpeg");

é o outro construtor para DefaultStreamedContent, nele você informa qual o tipo de arquivo.

Att.

YURI NUNES CARDOSO

unread,
Dec 27, 2011, 11:04:57 AM12/27/11
to jav...@googlegroups.com
Obrigado Douglas,

Infelizmente, não resolveu.

Obs: Se eu colocar como SessionScoped a imagem aparece.

Flavio Cysne

unread,
Dec 27, 2011, 11:05:27 AM12/27/11
to jav...@googlegroups.com
@Yuri

passa o content type no construtor do DefaultStreamedContent.

new DefaultStreamedContent(new ByteArrayInputStream(categoria.getImagem()), "image/png")

YURI NUNES CARDOSO

unread,
Dec 27, 2011, 11:08:55 AM12/27/11
to jav...@googlegroups.com
@Flávio,

Mesmo passando o content type pelo construtor, não funcionou.

Flavio Cysne

unread,
Dec 27, 2011, 11:31:29 AM12/27/11
to jav...@googlegroups.com
As informações da instância de categoria aparecem na tela?

Se aparecem, então use um wrapper no lugar da instância diretamente e coloque o código para retornar o StreamedContent dentro do wrapper.

public class CategoriaWrapper {

    private Categoria categoria;
    private StreamedContent imageContent;

    public CategoriaWrapper(Categoria categoria) {
        this.categoria = categoria;
        if (categoria != null && categoria.getImagem() != null) {
            this.imageContent = new DefaultStreamedContent(new ByteArrayInputStream(categoria.getImagem()), "image/png");
        }
    }
    // getters e setters
}

dessa forma o código no seu managed bean que recupera a imagem ficaria apenas assim

public StreamedContent getImagemCategoria() {
    return categoriaWrapper.getImageContent();
}

Com isso deve evitar de perder a referência ao streamedcontent quando usando o request scope.

Espero ter ajudado.
Flávio Cysne

Flavio Cysne

unread,
Dec 27, 2011, 12:02:27 PM12/27/11
to jav...@googlegroups.com
Espero que não seja um balde de água fria

YURI NUNES CARDOSO

unread,
Jan 9, 2012, 6:34:47 AM1/9/12
to javasf: JavaServer Faces Group
Bom dia,

@Flávio, depois de um bom tempo... rsrs, eu tentei sua dica e mesmo
assim não funcionou, continua dando erro na hora de renderizar a
imagem(Error in streaming dynamic resource). Pelo que entendi acima,
quer dizer que no escopo View ainda não é possível manipular
dinâmicamente?

Grato!

On Dec 27 2011, 2:02 pm, Flavio Cysne <flaviocy...@gmail.com> wrote:
> Espero que não seja um balde de água fria
>
> http://code.google.com/p/primefaces/issues/detail?id=1614
>
> Em 27 de dezembro de 2011 13:31, Flavio Cysne <flaviocy...@gmail.com>escreveu:
>
>
>
>
>
>
>
> > As informações da instância de categoria aparecem na tela?
>
> > Se aparecem, então use um wrapper no lugar da instância diretamente e
> > coloque o código para retornar o StreamedContent dentro do wrapper.
>
> > public class CategoriaWrapper {
>
> >     private Categoria categoria;
> >     private StreamedContent imageContent;
>
> >     public CategoriaWrapper(Categoria categoria) {
> >         this.categoria = categoria;
> >         if (categoria != null && categoria.getImagem() != null) {
> >             this.imageContent = new DefaultStreamedContent(new
> > ByteArrayInputStream(categoria.getImagem()), "image/png");
> >         }
> >     }
> >     // getters e setters
> > }
>
> > dessa forma o código no seu managed bean que recupera a imagem ficaria
> > apenas assim
>
> > public StreamedContent getImagemCategoria() {
> >     return categoriaWrapper.getImageContent();
> > }
>
> > Com isso deve evitar de perder a referência ao streamedcontent quando
> > usando o request scope.
>
> > Espero ter ajudado.
> > Flávio Cysne
>
> > Em 27 de dezembro de 2011 13:08, YURI NUNES CARDOSO <yncard...@gmail.com>escreveu:
>
> > @Flávio,
>
> >> Mesmo passando o content type pelo construtor, não funcionou.
>
> >> Em 27 de dezembro de 2011 13:05, Flavio Cysne <flaviocy...@gmail.com>escreveu:
>
> >> @Yuri
>
> >>> passa o content type no construtor do DefaultStreamedContent.
>
> >>>  new DefaultStreamedContent(new
> >>> ByteArrayInputStream(categoria.getImagem()), "image/png")
>
> >>> Em 27 de dezembro de 2011 12:42, YURI NUNES CARDOSO <yncard...@gmail.com
> >>>> Em 27 de dezembro de 2011 12:41, Douglas <doug.um...@gmail.com>escreveu:
>
> >>>> Por favor coloque o código que está utilizando
>
> >>>>> Em 27 de dezembro de 2011 12:48, YURI NUNES CARDOSO <
> >>>>> yncard...@gmail.com> escreveu:

Flavio Cysne

unread,
Jan 9, 2012, 8:19:56 AM1/9/12
to jav...@googlegroups.com
Sim, Yuri.
Na versão 2.2 não há suporte a viewscope p/ dynamic streamed content.
Na versão 3.0, o Primefaces usa a definição de resource do JSF 2.0 e isso, provavelmente, torne possível usar o dynamic streamed content no escopo de view.

YURI NUNES CARDOSO

unread,
Jan 9, 2012, 8:22:03 AM1/9/12
to jav...@googlegroups.com
Estou usando a 3.0 final do Primefaces e mesmo assim, continua sem renderizar a imagem. Se for escopo Session, funciona, mas quando coloco como View, não renderiza. Mas alguma dica de como contornar isso?

Grato!

YURI NUNES CARDOSO

unread,
Jan 11, 2012, 7:34:04 AM1/11/12
to javasf: JavaServer Faces Group
A imagem é armazenada como byte[] no banco. Quando recupero, converto
o array de byte[] em um StreamedContent, que é o tipo que o Primefaces
utiliza pra renderizar a imagem. Pensei em utilizar a tag
h:graphicImage no lugar de p:graphicImage pra mostrar a imagem. Porém,
teria que mudar a conversão de StreamedContent para ...?

Grato!

On Jan 9, 10:22 am, YURI NUNES CARDOSO <yncard...@gmail.com> wrote:
> Estou usando a 3.0 final do Primefaces e mesmo assim, continua sem
> renderizar a imagem. Se for escopo Session, funciona, mas quando coloco
> como View, não renderiza. Mas alguma dica de como contornar isso?
>
> Grato!
>
> Em 9 de janeiro de 2012 10:19, Flavio Cysne <flaviocy...@gmail.com>escreveu:
>
>
>
>
>
>
>
> > Sim, Yuri.
> > Na versão 2.2 não há suporte a viewscope p/ dynamic streamed content.
> > Na versão 3.0, o Primefaces usa a definição de resource do JSF 2.0 e isso,
> > provavelmente, torne possível usar o dynamic streamed content no escopo de
> > view.
>

YURI NUNES CARDOSO

unread,
Jan 11, 2012, 10:08:28 AM1/11/12
to javasf: JavaServer Faces Group
Resolvi utilizando um recurso parecido com o que Flavio propôs. Criei
um ManagedBean util com escopo de sessão e ao invés pegar a imagem do
ManagedBean com escopo View, pego no que tem escopo Session.

Obrigado a todos.

Bruno Maomeh

unread,
Jan 11, 2012, 10:16:41 AM1/11/12
to jav...@googlegroups.com
apenas tenha cuidado de não deixar muitas imagens nesse managedBean.. isso pode se tornar um grande gargalo para a aplicação!
Bruno Maomeh
   http://brunomaomeh.wordpress.com

Rafael Ponte

unread,
Jan 11, 2012, 10:22:27 AM1/11/12
to jav...@googlegroups.com
Imagens no banco de dados raramente é uma coisa boa (mas isso é discussão pra outra thread), mas já que você vai carrega-la porque não faz da maneira mais stateless possível?

Crie um managed bean, servlet, filter etc que recebe o ID da imagem via GET, ou seja, via URL, e renderize na página. Nem precisa ser um componente do faces, um simples elemento HTML <img src="/produtos/imagem/278394" /> resolve seu problema.

2012/1/11 Bruno Maomeh <bruno...@gmail.com>

YURI NUNES CARDOSO

unread,
Jan 11, 2012, 10:33:24 AM1/11/12
to jav...@googlegroups.com
@Bruno, concordo com você.

@Rafael, esta imagem eu mostro dentro de um p:dialog. O cenário é o seguinte:

Tenho uma dataTable com várias categorias, quando clico em "Editar" uma nova página é chamada e nela são setados as propriedades do objeto vindo da dataTable. Na hora de mostrar a imagem faço assim:

<h:outputText value="Imagem" rendered="#{!empty MBUtil.imagem}" />
                    <h:panelGroup id="imagemPanelGroup" rendered="#{!empty MBUtil.imagem}">
                        <p:commandButton onclick="dlg.show()" value="Imagem" styleClass="botaoSemMargem" />
                        <p:dialog widgetVar="dlg" header="#{categoriaMBean.categoria.nome}"
                            position="center" resizable="false" width="750" height="500">
                             <p:graphicImage value="#{MBUtil.imagem}" />
                        </p:dialog>
                    </h:panelGroup>        

O MB da categoria extende o MBUtil que contem o método que recupera a imagem do banco, como ele é Session a imagem é exebida dentro do p:dialog.

Você fala pra eu trocar o <p:graphicImage value="#{MBUtil.imagem}" /> pelo <img src="/produtos/imagem/278394" /> ?

Se sim, teria que colocar a imagem em um local físico, certo? Como o caminho acima.

Rafael Ponte

unread,
Jan 11, 2012, 10:44:09 AM1/11/12
to jav...@googlegroups.com
Oi Yuri,

2012/1/11 YURI NUNES CARDOSO <ynca...@gmail.com>

@Bruno, concordo com você.

@Rafael, esta imagem eu mostro dentro de um p:dialog. O cenário é o seguinte:

Tenho uma dataTable com várias categorias, quando clico em "Editar" uma nova página é chamada e nela são setados as propriedades do objeto vindo da dataTable. Na hora de mostrar a imagem faço assim:

<h:outputText value="Imagem" rendered="#{!empty MBUtil.imagem}" />
                    <h:panelGroup id="imagemPanelGroup" rendered="#{!empty MBUtil.imagem}">
                        <p:commandButton onclick="dlg.show()" value="Imagem" styleClass="botaoSemMargem" />
                        <p:dialog widgetVar="dlg" header="#{categoriaMBean.categoria.nome}"
                            position="center" resizable="false" width="750" height="500">
                             <p:graphicImage value="#{MBUtil.imagem}" />
                        </p:dialog>
                    </h:panelGroup>        

O MB da categoria extende o MBUtil que contem o método que recupera a imagem do banco, como ele é Session a imagem é exebida dentro do p:dialog.

Você fala pra eu trocar o <p:graphicImage value="#{MBUtil.imagem}" /> pelo <img src="/produtos/imagem/278394" /> ?

Isso. 

Se sim, teria que colocar a imagem em um local físico, certo? Como o caminho acima.
 

Não, você poderia ler a imagem do banco e jogar os bytes no output-stream do http response (definindo os headers corretos), ou seja, seguindo a mesma lógica do que você faz ao gerar um pdf.

Rafael Ponte

unread,
Jan 11, 2012, 10:49:21 AM1/11/12
to jav...@googlegroups.com
Você já escreveu algum managed bean com um método que escreve um pdf no response para download? É a mesma lógica.

2012/1/11 YURI NUNES CARDOSO <ynca...@gmail.com>
Teria algum exemplo semelhante? Confesso que fiquei um pouco perdido agora.

YURI NUNES CARDOSO

unread,
Jan 11, 2012, 10:47:08 AM1/11/12
to jav...@googlegroups.com
Teria algum exemplo semelhante? Confesso que fiquei um pouco perdido agora.

Em 11 de janeiro de 2012 12:44, Rafael Ponte <rpo...@gmail.com> escreveu:

YURI NUNES CARDOSO

unread,
Jan 11, 2012, 10:53:36 AM1/11/12
to jav...@googlegroups.com
Não, nunca fiz.

Rafael Ponte

unread,
Jan 11, 2012, 11:10:32 AM1/11/12
to jav...@googlegroups.com

Victor Salvalagio

unread,
Jan 24, 2012, 10:20:07 AM1/24/12
to javasf: JavaServer Faces Group
Olá,

Conseguiu resolver?
Estou com o mesmo problema.
Já coloquei a configuração no web.xml mas não axo que isso é o
problema.

YURI NUNES CARDOSO

unread,
Jan 25, 2012, 10:10:07 AM1/25/12
to jav...@googlegroups.com
Então amigo, eu resolvi criando um MB com escope de sessão. Com isso, buscava nele a imagem. Nos outros escopos, o Primefaces tem problema em renderizar as imagens.

YURI NUNES CARDOSO

unread,
Jun 8, 2012, 2:05:30 PM6/8/12
to jav...@googlegroups.com
Na verdade consegui resolver colocando o objeto inteiro dentro da sessão.

Eu tenho a Categoria, e dentro dela uma imagem (byte[]).

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("categoria", categoria);

Assim, consegui "manter" a imagem disponível. 

Em 8 de junho de 2012 13:38, Jose Carlos dos Santos Ferreira <jcarlos....@gmail.com> escreveu:
Boa tarde amigo,

           Estou exatamente com o mesmo problema e tentei resolver como você. Criei um managed bean com escopo de sessão e não resolveu. Você poderia postar o código que você utilizou?

obrigado,
José Carlos

AraujoGo

unread,
Jun 26, 2013, 2:20:51 PM6/26/13
to jav...@googlegroups.com
Pessoal,

Tentei fazer como Yuri indicou, dizendo que fez um outro bean RequestScoped, porém estou com dificuldades para obter os parametros necessarios de identificação para buscar a foto a ser renderizada, e no caso se trata de uma chave composta codEmpresa e codFunc onde vou buscar a foto do funcionário, ja tentei assim:

FotoUtilMB - getFoto()

String codEmp = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("imgEmp");
            String codigo = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("imgCod");
            if(codEmp != null && codigo != null){
                FuncionarioControl control = new FuncionarioControl();
                Funcionario func = control.buscaPorId(new FuncionarioId(Integer.valueOf(codigo), Integer.valueOf(codEmp)));
                this.foto = new DefaultStreamedContent(new ByteArrayInputStream(func.getFoto()), "image/png");
                return this.foto;
            }

e no xhtml

 <p:graphicImage value="#{fotoUtil.foto}" width="130px" height="200px" style="position:center">
                    <f:param name="imgEmp" value="#{funcionarioBean.func.id.codEmp}"/>
                    <f:param name="imgCod" value="#{funcionarioBean.func.id.codigo}"/>
                  </p:graphicImage>

porem estes parametros sempre recebem null, algo de errado que estou fazendo??

On Wednesday, January 30, 2013 2:04:27 PM UTC-2, Yuri NUNES CARDOSO wrote:
Oi Igor,

No xhtml fiz assim:

<p:graphicImage value="#{mbUtil.imagem}" />

no MBUtil, onde pego a imagem desta forma:

public StreamedContent getImagem() {   
       
        Categoria categoria = (Categoria) FacesUtil.getSessionMap().get("categoria");

       
        if (categoria != null && categoria.getImagem() != null) {
           
            imagem = new DefaultStreamedContent(new ByteArrayInputStream(categoria.getImagem()), "image/png");
           
            return imagem;
        }
        return null;
    }

O objeto Categoria, é um bean qualquer.

Em terça-feira, 29 de janeiro de 2013 15h49min33s UTC-3, Igor de Almeida escreveu:
Boa tarde Yuri,

poderia postar o código de como você faz a chamada no xhtml?

Esta categoria seria que tipo de objeto?
Reply all
Reply to author
Forward
0 new messages