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

ale*_*der 3 jsf graphicimage omnifaces

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

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

我的财产看起来像:

@Lob
private byte[] image;
Run Code Online (Sandbox Code Playgroud)

我的dao /服务是这样的:

@Name
@ApplicationScoped
public class Images {

    @Inject
    private UserDAO userDAO;

    public byte[] getById(int id) {
        return userDAO.getUserByID(id).getImage();
    }
Run Code Online (Sandbox Code Playgroud)

针对具体问题:

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

我的假设:没有找到图像,也没有显示图像(或者没有找到典型的"图像"图像).

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

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

Bal*_*usC 5

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

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

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

<o:graphicImage ... lastModified="#{image.lastModified}" />
Run Code Online (Sandbox Code Playgroud)

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

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

也可以看看: