Java <;h:graphicImage>;在JSF中没有得到刷新
我想在JSFWeb应用程序中显示一个xhtml文件中的图形图像,该文件在每次运行时都会发生变化。上传完成后,我将显示一幅图像。但在上传任何图像后,它总是显示我第一次上传的图像。在执行刷新操作时,显示最近上载的图像。为什么它总是显示我在第一次尝试时上传的图像。如何使用Java <;h:graphicImage>;在JSF中没有得到刷新,java,jsf,Java,Jsf,我想在JSFWeb应用程序中显示一个xhtml文件中的图形图像,该文件在每次运行时都会发生变化。上传完成后,我将显示一幅图像。但在上传任何图像后,它总是显示我第一次上传的图像。在执行刷新操作时,显示最近上载的图像。为什么它总是显示我在第一次尝试时上传的图像。如何使用h:graphicImage显示最近上传的图像。我正在使用servlet显示图像。有人能帮我吗 public void displayImage(byte[] image,HttpServletResponse response) {
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}&t=#{now.time}" />
我使用primefaces上传图像。上载图像时,我正在提取图像的字节,然后使用servlet显示它。如果您已经在使用primefaces,为什么不尝试使用
而不是使用servlet?看看这个,您最好使用它来显示图像,只需在上载文件后使用update=“”更新p:graphicImage即可当然是上传组件,但不管怎样,上传文件完成后你会更新你的吗?是的,Daniel是对的。如果不更新图像组件,它将不会显示最新的图像。这就是为什么我建议使用PrimeFaces的图像。只需为您的
提供一个id,并将update=“imageID”
添加到您的
中,我在应用程序中使用servlet还有一些其他用途。我认为这里存在浏览器缓存问题。这可能是不显示最近上载的图像的原因。缓存中有我首先上传的图像。如何清除它…??我使用了“”和“”,我遇到了这个问题。下面的代码修复了这个问题,现在浏览器在ajax提交中显示图片。谢谢@BalusC