Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java <;h:graphicImage>;在JSF中没有得到刷新_Java_Jsf - Fatal编程技术网

Java <;h:graphicImage>;在JSF中没有得到刷新

Java <;h:graphicImage>;在JSF中没有得到刷新,java,jsf,Java,Jsf,我想在JSFWeb应用程序中显示一个xhtml文件中的图形图像,该文件在每次运行时都会发生变化。上传完成后,我将显示一幅图像。但在上传任何图像后,它总是显示我第一次上传的图像。在执行刷新操作时,显示最近上载的图像。为什么它总是显示我在第一次尝试时上传的图像。如何使用h:graphicImage显示最近上传的图像。我正在使用servlet显示图像。有人能帮我吗 public void displayImage(byte[] image,HttpServletResponse response) {

我想在JSFWeb应用程序中显示一个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 ");    
      }  
以下是我显示图像的代码:

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),其中有一个上传的图像,我可以裁剪图像,这样我就可以将其保存在第一个窗口的签名框中。它工作得很好。但是,当我取消/关闭第二个窗口时,第一个窗口的签名框仍然为空。所以用户可以上传一些其他的图片。在这种情况下,当我尝试上传一个图像时,它成功地被上传,但它没有显示在第二个窗口中,它仍然显示我在第一次尝试时上传的图像。我该怎么修

告诉浏览器不要缓存图像。在将第一位写入servlet响应的主体之前,在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 ");    
      }  
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中添加一个带有时间戳的请求参数

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 ");    
      }  
<h:graphicImage value="imageServlet?id=#{bean.imageId}&amp;t=#{now.time}" />

我使用primefaces上传图像。上载图像时,我正在提取图像的字节,然后使用servlet显示它。如果您已经在使用primefaces,为什么不尝试使用
而不是使用servlet?看看这个,您最好使用它来显示图像,只需在上载文件后使用update=“”更新p:graphicImage即可当然是上传组件,但不管怎样,上传文件完成后你会更新你的吗?是的,Daniel是对的。如果不更新图像组件,它将不会显示最新的图像。这就是为什么我建议使用PrimeFaces的图像。只需为您的
提供一个id,并将
update=“imageID”
添加到您的
中,我在应用程序中使用servlet还有一些其他用途。我认为这里存在浏览器缓存问题。这可能是不显示最近上载的图像的原因。缓存中有我首先上传的图像。如何清除它…??我使用了“”和“”,我遇到了这个问题。下面的代码修复了这个问题,现在浏览器在ajax提交中显示图片。谢谢@BalusC