o:在数据库中删除或更新实际图像时,graphicImage不会更改

时间:2015-05-08 19:47:42

标签: jsf omnifaces graphicimage

我正在尝试显示存储在数据库中的内容。 我有<o:graphicImage value="#{image.getById(1)}" />

注意:ID(1)仅用于测试。

我的财产看起来像:

@Lob
private byte[] image;

我的dao / service是这样的:

@Name
@ApplicationScoped
public class Images {

    @Inject
    private UserDAO userDAO;

    public byte[] getById(int id) {
        return userDAO.getUserByID(id).getImage();
    }

针对具体问题:

我刚刚实现了这一点,图像显示正确。我手动将图像设置为数据库中的NULL

我的假设:未找到图像且未显示图像(或未找到典型的图像&#39; -image。)。

但是:显示旧图像。即使重新启动服务器并清理干净。没有改变。我试图将其他图像上传到数据库 - 结果相同。

这是什么问题?我的错在哪里?我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:5)

客户端正在缓存图像。 <o:graphicImage>在这方面非常有效。

您基本上需要清理浏览器缓存,或在浏览器中执行强制重新加载,或者打开隐身窗口。

避免这种情况的一种方法是在lastModified属性中包含图片的“上次修改”时间戳,该时间戳可以是表示纪元时间的java.util.Datejava.lang.Long。最好是将此属性添加到您的实体。

<o:graphicImage ... lastModified="#{image.lastModified}" />

它最终会在生成的图片网址中以v=请求参数结束,因此会在浏览器缓存发生变化时欺骗它。

另一种方法是在方法参数中更改图像的ID。如果您仍然继续在HTML响应中提供旧图像ID,那么在该视角中也会有点奇怪,而此ID在数据库中不再存在。

另见: