咆哮的木瓜 · VBA学习笔记31:自定义函数2 - 知乎· 6 月前 · |
踢足球的鼠标 · HTML5拖放排序 - 是阿恒呀 - 博客园· 7 月前 · |
笑点低的猴子 · conda安装失败,pip正常安装 - 知乎· 1 年前 · |
精明的菠菜 · Elasticsearch 查询in 和 ...· 1 年前 · |
逃课的风衣
10 月前 |
在PrimeFaces 8.0中,
DefaultStreamedContent
不能像
new DefaultStreamedContent(inputStream, contentType, name)
那样初始化,因为它已经被废弃了,而应该使用
DefaultStreamedContent.builder()
。
尽管在执行
.stream()
时,它要求使用
SerializableSupplier<InputStream>
,而不是像8.0之前版本中的
InputStream
那样。
DefaultStreamedContent.builder().contentType(contentType).name(name).stream(is).build();
^^
如何将
InputStream
转换为
SerializableSupplier
发布于 2020-01-03 10:37:10
所有东西都在这里的迁移指南中: https://github.com/primefaces/primefaces/wiki/Migration-Guide 。
一般而言,以下内容将起作用:
DefaultStreamedContent.builder().contentType(contentType).name(name).stream(() -> is).build();
但改变背后的想法却是不同的。
如果您使用RequestScoped bean构建StreamedContent,那么您的bean和StreamedContent将被创建两次:
在这种情况下,您的
is
可能会创建两次。大多数情况下,这会导致一个无用的IO访问或DB调用。
要只创建一次
is
,您应该惰性地通过供应商lambda初始化它:
DefaultStreamedContent.builder().contentType(contentType).name(name).stream(() -> new FileInputStream(....)).build();
发布于 2021-01-14 17:25:26
上面@tandraschko的惰性初始化答案在使用java 8的Netbeans中对我不起作用,我必须先创建FileInputStream,然后再将它注入构建器。
所以我的代码看起来是:
public StreamedContent getFiledownload() {
FileInputStream fis = new FileInputStream("...");
filedownload = DefaultStreamedContent.builder()
.contentType("...")
.name("...")
.stream(() -> fis)
.build();
return filedownload;
咆哮的木瓜 · VBA学习笔记31:自定义函数2 - 知乎 6 月前 |
踢足球的鼠标 · HTML5拖放排序 - 是阿恒呀 - 博客园 7 月前 |
笑点低的猴子 · conda安装失败,pip正常安装 - 知乎 1 年前 |