4

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

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

我的财产看起来像:

@Lob
private byte[] image;

我的 dao/服务是这样的:

@Name
@ApplicationScoped
public class Images {

    @Inject
    private UserDAO userDAO;

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

对于具体问题:

我刚刚实现了这个并且图像正确显示。我将图像手动设置到NULL数据库中。

我的假设:未找到图像且未显示图像(或典型的“未找到图像”-图像。)。

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

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

4

1 回答 1

5

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

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

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

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

它最终会v=在生成的图像 URL 中作为请求参数结束,从而在它更改时欺骗浏览器缓存。

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

也可以看看:

于 2015-05-09T14:33:18.127 回答