o:graphicImage 在数据库中删除或更新实际图像时不会更改
o:graphicImage does not change when actual image is deleted or updated in database
我正在尝试显示存储在数据库中的一个。
我有一个<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
。
我的假设:未找到图像且未显示图像(或典型的 'image is not found'-图像。)。
但是:显示的是旧图像。即使在重新启动服务器并清理干净之后。没有改变。我试图将另一张图片上传到数据库 - 结果相同。
这里有什么问题?我的错在哪里?我怎样才能解决这个问题?
图像正在被客户端缓存。 <o:graphicImage>
在这方面非常有效。
您基本上需要清理浏览器缓存,或在浏览器中执行强制重新加载,或打开隐身模式 window。
避免这种情况的一种方法是在 lastModified
属性中包含图像的“最后修改”时间戳,它可以是 java.util.Date
,也可以是代表时代的 java.lang.Long
时间。最好将此 属性 添加到您的实体中。
<o:graphicImage ... lastModified="#{image.lastModified}" />
它最终将作为生成图像 URL 中的 v=
请求参数结束,特此在其更改时欺骗浏览器缓存。
另一种方法是仅在方法参数中更改图像的 ID。如果您仍然在 HTML 响应中提供旧图像 ID,而数据库中不再存在此 ID,从这个角度来看也有点奇怪。
另请参阅:
我正在尝试显示存储在数据库中的一个。
我有一个<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
。
我的假设:未找到图像且未显示图像(或典型的 'image is not found'-图像。)。
但是:显示的是旧图像。即使在重新启动服务器并清理干净之后。没有改变。我试图将另一张图片上传到数据库 - 结果相同。
这里有什么问题?我的错在哪里?我怎样才能解决这个问题?
图像正在被客户端缓存。 <o:graphicImage>
在这方面非常有效。
您基本上需要清理浏览器缓存,或在浏览器中执行强制重新加载,或打开隐身模式 window。
避免这种情况的一种方法是在 lastModified
属性中包含图像的“最后修改”时间戳,它可以是 java.util.Date
,也可以是代表时代的 java.lang.Long
时间。最好将此 属性 添加到您的实体中。
<o:graphicImage ... lastModified="#{image.lastModified}" />
它最终将作为生成图像 URL 中的 v=
请求参数结束,特此在其更改时欺骗浏览器缓存。
另一种方法是仅在方法参数中更改图像的 ID。如果您仍然在 HTML 响应中提供旧图像 ID,而数据库中不再存在此 ID,从这个角度来看也有点奇怪。