p:graphicImage 的替代方案,它可以显示来自 byte[] 的图像并控制浏览器缓存
Alternative for p:graphicImage which can show images from byte[] and control browser cache
使用更新功能时 p:graphicimage
似乎存在错误。通过 value="#{myController.myStreamedContent}"
加载一张图像有效,但是当更改 myController.myStreamedContent
后更新 p:graphicimage
时,先前加载的图像保持不变。可以设置 cache="false"
,但这在我的 Firefox 45.0 中不起作用。我使用 PrimeFaces 5.3。
以下网站也提到了这一点:
- PRIMEFACES - How to refresh a from clicking a ?
- Primefaces : GraphicImage does not refresh
- Why can't I update a p:graphicImage twice after upload a file with p:uploadFile
是否有任何替代方案可以提供与 p:graphicimage
相似或相同的功能?我基本上需要能够在 MEDIUMBLOB
.
中显示存储为 byte[]
的图像
JSF 实用程序库OmniFaces has a <o:graphicImage>
which does technically a better job in streaming and caching the images. It doesn't invoke the getter method twice,但只在浏览器真正需要下载图像时才执行一次。此外,它支持使用 byte[]
或 InputStream
而无需包装器。总而言之,您最终会得到更清晰的模型。
@Named
@ApplicationScoped
public class ImageStreamer {
@Inject
private ImageService service;
public byte[] getById(Long id) {
return service.getContent(id);
}
}
<o:graphicImage value="#{imageStreamer.getById(bean.image.id)}" />
默认情况下强制浏览器不缓存图像,因此每次请求都会下载图像。为了提高效率,可以设置 lastModified
属性以允许浏览器缓存图像,只要图像未根据 lastModified
值更改。
<o:graphicImage value="#{imageStreamer.getById(bean.image.id)}" lastModified="#{bean.image.lastModified}" />
使用更新功能时 p:graphicimage
似乎存在错误。通过 value="#{myController.myStreamedContent}"
加载一张图像有效,但是当更改 myController.myStreamedContent
后更新 p:graphicimage
时,先前加载的图像保持不变。可以设置 cache="false"
,但这在我的 Firefox 45.0 中不起作用。我使用 PrimeFaces 5.3。
以下网站也提到了这一点:
- PRIMEFACES - How to refresh a from clicking a ?
- Primefaces : GraphicImage does not refresh
- Why can't I update a p:graphicImage twice after upload a file with p:uploadFile
是否有任何替代方案可以提供与 p:graphicimage
相似或相同的功能?我基本上需要能够在 MEDIUMBLOB
.
byte[]
的图像
JSF 实用程序库OmniFaces has a <o:graphicImage>
which does technically a better job in streaming and caching the images. It doesn't invoke the getter method twice,但只在浏览器真正需要下载图像时才执行一次。此外,它支持使用 byte[]
或 InputStream
而无需包装器。总而言之,您最终会得到更清晰的模型。
@Named
@ApplicationScoped
public class ImageStreamer {
@Inject
private ImageService service;
public byte[] getById(Long id) {
return service.getContent(id);
}
}
<o:graphicImage value="#{imageStreamer.getById(bean.image.id)}" />
默认情况下强制浏览器不缓存图像,因此每次请求都会下载图像。为了提高效率,可以设置 lastModified
属性以允许浏览器缓存图像,只要图像未根据 lastModified
值更改。
<o:graphicImage value="#{imageStreamer.getById(bean.image.id)}" lastModified="#{bean.image.lastModified}" />