jsf - p :graphicImage which can show images from byte[] and control browser cache 的替代方案

标签 jsf primefaces arrays browser-cache graphicimage

使用更新功能时,p:graphicimage 似乎存在错误。通过 value="#{myController.myStreamedContent}" 加载一张图像是可行的,但是当更改 myController.myStreamedContent 然后更新 p:graphicimage 时,先前加载的图像保持不变。可以设置 cache="false",但这在我的 Firefox 45.0 中不起作用。我使用 PrimeFaces 5.3。

以下网站也提到了这一点:

是否有任何替代方案可以提供与 p:graphicimage 类似或相同的功能?我基本上需要能够显示在 MEDIUMBLOB 中存储为 byte[] 的图像。

最佳答案

JSF 实用程序库 OmniFaces有一个 <o:graphicImage> 从技术上讲,它在流式传输和缓存图像方面做得更好。它不会调用 getter 方法 twice ,但仅当浏览器确实需要下载图像时才进行一次。此外,它还支持使用 byte[]InputStream无需 wrapper 。总而言之,您最终会得到更清晰的模型。

@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}" />

关于jsf - p :graphicImage which can show images from byte[] and control browser cache 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36109873/

相关文章:

c - 找到数组中出现次数最多的数字

java - 将对象转换为数组 [Java]?

javascript - Jquery:匹配两个数组,字符串和对象的索引以替换对象中的文本?

javascript - 使用 DHTML 事件 onmouseover 更改 JSF 命令按钮的图像

java - 如何使用 apache POI 和 PrimeFaces 将新工作表添加到现有 Excel 工作簿

jsf - 扩展 h :outputText for custom functionality

javascript - 使用 javascript 设置 primefaces spinner 的值时出现奇怪的行为

jsf - 如何将丰富的参数传递给 i18n 的 jsf?

html - p :layoutUnit ignore the margin-top

javascript - 动态更改 p :selectCheckboxMenu when items are selected 的样式