In PrimeFaces 8.0 the DefaultStreamedContent
cannot be initialized like new DefaultStreamedContent(inputStream, contentType, name)
because it has been deprecated, instead you shound use DefaultStreamedContent.builder()
.
Although while doing .stream()
it asks for a SerializableSupplier<InputStream>
instead of an InputStream
like in the version before 8.0.
DefaultStreamedContent.builder().contentType(contentType).name(name).stream(is).build();
^^
How can I convert a InputStream
to a SerializableSupplier
?
Everthing is in the migration guide here: https://github.com/primefaces/primefaces/wiki/Migration-Guide.
in general the following will work:
DefaultStreamedContent.builder().contentType(contentType).name(name).stream(() -> is).build();
But the idea behind the change is a different.
If you use a RequestScoped bean to build the StreamedContent, your bean and therefore the StreamedContent will be created twice:
In this case, your is
will probably created 2 times. Most of the times this results in 1 useless IO access or DB call.
To only create the is
one time, you should lazy initialize it via the supplier lambda:
DefaultStreamedContent.builder().contentType(contentType).name(name).stream(() -> new FileInputStream(....)).build();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With