2

我想在 jsf Web 应用程序中显示一个图形图像,该图像来自一个每次运行都会发生变化的 xhtml 文件。上传完成后,我正在显示图像。但是在上传任何图像后,它总是显示我第一次上传的图像。在进行刷新时,它会显示最近上传的图像。为什么它总是显示我第一次尝试上传的图像。我怎样才能显示最近上传的图像h:graphicImage。我正在使用 servlet 来显示图像。谁能帮我吗...???

这是我显示图像的代码:

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),我可以裁剪图像,以便我可以将其保存在第一个窗口的签名框中。它工作正常。但是当我取消/关闭第二个窗口时会发生什么是第一个签名框仍然是空的。所以用户可以上传一些其他的图像。在这种情况下,当我尝试上传图像时,它已成功上传,但未显示在第二个窗口中,它仍然显示我第一次尝试上传的图像。我如何解决它...???

4

1 回答 1

3

告诉浏览器不要缓存图像。在第一个位写入其主体之前,在 servlet 响应上设置以下标头:

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.

为了防止顽固的浏览器仍然缓存它,请将带有时间戳的请求参数添加到 servlet 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>
于 2012-05-16T11:51:33.333 回答