![]() |
成熟的圣诞树 · highcharts生成不同高度的3D饼图- ...· 1 年前 · |
![]() |
会开车的熊猫 · matlab批量修改变量名快捷键-掘金· 1 年前 · |
![]() |
朝气蓬勃的李子 · Java8 stream 中利用 ...· 2 年前 · |
![]() |
爱搭讪的烤面包 · filebeat定义处理器 - ...· 2 年前 · |
![]() |
逃课的风衣
1 年前 |
在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;
![]() |
会开车的熊猫 · matlab批量修改变量名快捷键-掘金 1 年前 |