Cómo utilizar el contenido transmitido con p: fileDownload para descargar el archivo de ruta no de clase

Estoy usando Primefaces

p: archivoDescargar

para descargar un archivo que no está en la ruta de clase.
Así que estoy pasandoFileInputStream como parámetro paraDefaultStreamedContent.
Todo funciona bien cuando mi frijol se mantiene en@SessionScoped...,
Pero

java.io.NotSerializableException: java.io.FileInputStream

se tira cuando mantengo mi frijol en@Viewscoped.

Mi código:

DescargarBean.java

@ManagedBean
@ViewScoped
public class DownloadBean implements Serializable {

    private StreamedContent dFile;

    public StreamedContent getdFile() {
        return dFile;
    }

    public void setdFile(StreamedContent dFile) {
        this.dFile = dFile;
    }

    /**
     * This Method will be called when download link is clicked
     */
    public void downloadAction()
    {
        File tempFile = new File("C:/temp.txt");
        try {
            dFile = new DefaultStreamedContent(new FileInputStream(tempFile), new MimetypesFileTypeMap().getContentType(tempFile));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

index.xhtml

<h:form>
    <h:commandLink action="#{downloadBean.downloadAction}">
        Download
        <p:fileDownload value="#{downloadBean.dFile}"/>
    </h:commandLink>
</h:form>

¿No hay algún método para hacerlo funcionar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta