2016-03-02 3 views
3

Я пытаюсь отобразить p: graphicImage с динамическим контентом. Мое мнение:p: graphicImage не отображается в Internet Explorer 10+

<p:graphicImage value="#{loginBean.loginImage}" /> 

Резервное боб (Spring Bean/Singleton Scope)

public StreamedContent getLoginImage() throws IOException 
    { 
     if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) 
     { 
      return new DefaultStreamedContent(); 
     } 

     String loginImage; 

     if (developmentState) 
     { 
      loginImage = "dev.jpg"; 

     } else 
     { 
      loginImage = "prod.jpg"; 
     } 

     final byte[] bytes = ... load bytes 
     return new DefaultStreamedContent(new ByteArrayInputStream(bytes), "image/jpg"); 
    } 

Это отлично работает в Firefox/Chrome. Но он не в IE 10+ Вместо реального изображения есть пустое окно визуализации

Моя страница Войти использует:

<h:head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

    <f:facet name="first"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    </f:facet> 
</h:head> 

Страница визуализируется. В IE отсутствует только изображение (Firefox/Chrome корректно отображает). Ошибок на стороне сервера даже при включенном уровне TRACE.

IE:

<img id="j_idt10" alt="" src="/appContext/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&amp;pfdrid=ufpDFHhNpCx9dNk92OfD7uAPP6LjduXzuDwZf73cSco%3D&amp;pfdrt=sc&amp;pfdrid_c=true"> 

Chrome:

<img id="j_idt10" src="/appContext/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&amp;pfdrid=ufpDFHhNpCx9dNk92OfD7uAPP6LjduXzuDwZf73cSco%3D&amp;pfdrt=sc&amp;pfdrid_c=true" alt=""> 

Firefox:

<img alt="" src="/appContext/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&amp;pfdrid=ufpDFHhNpCx9dNk92OfD7uAPP6LjduXzuDwZf73cSco%3D&amp;pfdrt=sc&amp;pfdrid_c=true" id="j_idt10"> 

IExplore DEV консоль говорит:

HTTP GET 200 44,29 KB 16 ms <img> for image 
/appConctext/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&pfdrid=ufpDFHhNpCx9dNk92OfD7uAPP6LjduXzuDwZf73cSco%3D&pfdrt=sc&pfdrid_c=true 

Любая помощь будет действительно оценена. Спасибо

+0

Изображение не отображается в IE10 + – tillias

+0

Здравствуйте @BalusC. Я добавил путь запроса/изображения в исходное сообщение. Это HTTP 200, если смотреть в IE Console – tillias

+0

Content-Type \t изображения/JPG HTTP/1.1 200 OK При открытии прямой связи в IEXPLORE он говорит: Эта страница содержит следующие ошибки: ошибки в строке 1 в колонке 1: Документ пуст ошибка в строке 1 в столбце 1: Ошибка кодирования Ниже представлена ​​рендеринг страницы до первой ошибки. dynamiccontent.properties.xhtml – tillias

ответ

0

Вдохновленный комментарием BalusC, я добавил заголовок Content-Type «image/jpeg» в части DefaultStreamedContent.

return new DefaultStreamedContent(new ByteArrayInputStream(bytes), "image/jpg"); 

Примечание: «изображение/JPG» не работает с Internet Explorer

+0

Обратите внимание, что в моем исходном сообщении заголовок Content-Type установлен. Но он все еще не работает – tillias

1

браузеры не обновлять изображение с помощью AJAX, если URL не будет изменен. Поэтому вам следует добавить случайное число в URL-адрес ресурса. Относительно этого link

0

Я нашел обходное решение, которое работало в моем случае.

public StreamedContent getLoginImage() throws IOException { 
    if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { 
    return new DefaultStreamedContent(); 
    } 

    String loginImage; 

    if (developmentState) { 
    loginImage = "dev.jpg"; 

    } else { 
    loginImage = "prod.jpg"; 
    } 

    final byte[] bytes = ...load bytes 

    final InputStream stream = new ByteArrayInputStream(bytes); 

    BufferedImage bufferedImg = ImageIO.read(stream); 
    ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    try { 
    ImageIO.write(bufferedImg, "png", os); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 

    return new DefaultStreamedContent(new ByteArrayInputStream(os.toByteArray()), "image/jpg"); 
} 
Смежные вопросы