gpt4 book ai didi

java - is not getting refreshed in JSF

转载 作者:行者123 更新时间:2023-12-04 05:46:31 25 4
gpt4 key购买 nike

我想从每次运行都会更改的 xhtml 文件在 jsf Web 应用程序中显示图形图像。上传完成后,我正在显示图像。但是发生的事情是在上传任何图像后,它总是显示我第一次上传的那个。在刷新时显示最近上传的图像。为什么它总是显示我第一次上传的图像。如何使用 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),在那里我可以裁剪图像,以便我可以将其保存在第一个窗口的签名框中。它工作正常。但是当我取消/关闭第二个窗口时会发生什么,第一个的签名框仍然是空的。所以用户可以上传一些其他图像。在这种情况下,当我尝试上传图像时,它成功上传但没有显示在第二个窗口中,它仍然显示我第一次上传的图像。我如何解决它...???

最佳答案

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

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>

关于java - <h :graphicImage> is not getting refreshed in JSF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com