Вопрос по jsf, java – не обновляется в JSF

2

Я хотел бы отобразить графическое изображение в веб-приложении jsf из файла xhtml, который изменяется при каждом запуске. Я показываю изображение после завершения загрузки. Но то, что происходит после загрузки любого изображения, всегда показывает то, которое я загрузил в первый раз. При обновлении отображается последнее загруженное изображение. Почему это всегда показывает изображение, которое я загрузил с первой попытки. Как я могу отобразить самое последнее загруженное изображение сh:graphicImage, Я использую сервлет для отображения изображения. Может кто-нибудь мне помочь...???

Вот мой код для отображения изображения:

public void displayImage(byte[] image,HttpServletResponse response) { 
      ServletOutputStream out;
      if ( image != null ) {
      BufferedImage bufferedImage; 
           try {
                      bufferedImage = ImageIO.read(new ByteArrayInputStream(image)); 
                out = response.getOutputStream(); 
                ImageIO.write(bufferedImage, "png",out);
           } catch (IOException e) { 
                logger.info("Exception in reading the image" + e);
           }
      } else {     
           logger.info("No bytes present ");    
      }  

это мое актуальное требование ... В первом окне у меня есть поле для подписи. В этом у меня есть кнопка загрузки. Как только загрузка будет завершена, я покажу окно (2) с загруженным изображением, которое я могу обрезать, чтобы я мог сохранить его в поле для подписи первого окна. это работает нормально. Но что происходит, когда я отменяю / закрываю второе окно, поле подписи первого остается пустым. Таким образом, пользователь может загрузить другое изображение. В этом случае, когда я пытаюсь загрузить изображение, оно успешно загружается, но оно не отображается во 2-м окне, оно все равно показывает изображение, которое я загрузил с первой попытки. Как мне это исправить ... ???

У меня есть другая цель использования сервлета в моем приложении. Я думаю, что проблема кеширования браузера есть здесь. это может быть причиной не отображения недавно загруженного изображения. Кеш имеет изображение, которое я загрузил первым. Как мне это очистить ... ??? Thirumurthy
Да, Даниэль прав. Оно не покажет последнее изображение, если вы не обновите компонент изображения. Вот почему я предложил использовать PrimeFaces. образ. Просто дайте идентификатор вашему<p:graphicsImage> и добавитьupdate="imageID" на ваш<p:fileUpload> StepTNT
Если вы уже используете простые символы, почему бы вам не попробовать<p:graphicsImage> вместо использования сервлета? StepTNT
Для загрузки изображения я использую простые символы. при загрузке изображения я извлекаю байты изображения и затем отображаю его с помощью сервлета. Thirumurthy
Взгляни на этоprimefaces.org/showcase/ui/dynamicImage.jsf Вам лучше использовать его для отображения ваших изображений, просто обновите p: graphicImage после загрузки файла с помощью update = & quot; & quot; компонента загрузки, но в любом случае вы обновляете & lt; h: graphicImage & gt; после завершения загрузки файла? Daniel

Ваш Ответ

1   ответ
3

Скажите браузеру не кэшировать изображение. Установите следующие заголовки в ответе сервлета до того, как в его тело будет записан первый бит:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

Чтобы браузеры с жестким носом не продолжали кэшировать его, добавьте параметр запроса с меткой времени в URL сервлета.

<h:graphicImage value="imageServlet?id=#{bean.imageId}&amp;t=#{now.time}" />

куда#{now} был зарегистрирован вfaces-config.xml следующее:

<managed-bean>
    <managed-bean-name>now</managed-bean-name>
    <managed-bean-class>java.util.Date</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
Error: User Rate Limit Exceeded

Похожие вопросы