我正在尝试显示存储在数据库中的 a。
我有一个 <o:graphicImage value="#{image.getById(1)}" />
.
注意:ID (1) 仅用于测试。
我的属性(property)看起来像:
@Lob
private byte[] image;
我的道/服务是这样的:
@Name
@ApplicationScoped
public class Images {
@Inject
private UserDAO userDAO;
public byte[] getById(int id) {
return userDAO.getUserByID(id).getImage();
}
具体问题:
我刚刚实现了这个,图像显示正确。我手动将图像设置为
NULL
在数据库中。我的假设:未找到图像且未显示图像(或典型的“未找到图像”-图像。)。
但是:显示旧图像。即使在重新启动服务器和干净之后。没有改变。我尝试将其他图像上传到数据库 - 结果相同。
这里有什么问题?我的错在哪里?我怎样才能解决这个问题?
最佳答案
图像正在被客户端缓存。 <o:graphicImage>
在这方面非常有效。
您基本上需要清理浏览器缓存,或在浏览器中执行强制重新加载,或打开隐身窗口。
避免这种情况的一种方法是在 lastModified
中包含图像的“最后修改”时间戳。属性,可以是 java.util.Date
,或 java.lang.Long
代表纪元。最好是将此属性添加到您的实体。
<o:graphicImage ... lastModified="#{image.lastModified}" />
它最终会变成 v=
生成的图像 URL 中的请求参数,从而在更改时欺骗浏览器缓存。另一种方法是在方法参数中更改图像的 ID。如果您仍然继续在 HTML 响应中提供旧的图像 ID 而该 ID 不再存在于数据库中,那么从这个角度来看也有点奇怪。
也可以看看:
<o:graphicImage>
showcase - Caching 关于jsf - Ø :graphicImage does not change when actual image is deleted or updated in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30131762/