我正在尝试显示存储在数据库中的内容。
我有<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。)。
但是:显示旧图像。即使重新启动服务器并清理干净。没有改变。我试图将其他图像上传到数据库 - 结果相同。
这是什么问题?我的错在哪里?我怎样才能解决这个问题?
答案 0 :(得分:5)
客户端正在缓存图像。 <o:graphicImage>
在这方面非常有效。
您基本上需要清理浏览器缓存,或在浏览器中执行强制重新加载,或者打开隐身窗口。
避免这种情况的一种方法是在lastModified
属性中包含图片的“上次修改”时间戳,该时间戳可以是表示纪元时间的java.util.Date
或java.lang.Long
。最好是将此属性添加到您的实体。
<o:graphicImage ... lastModified="#{image.lastModified}" />
它最终会在生成的图片网址中以v=
请求参数结束,因此会在浏览器缓存发生变化时欺骗它。
另一种方法是在方法参数中更改图像的ID。如果您仍然继续在HTML响应中提供旧图像ID,那么在该视角中也会有点奇怪,而此ID在数据库中不再存在。