页面刷新后保持primefaces套接字(推送)连接

时间:2014-04-08 10:01:00

标签: jsf primefaces download push

我使用由fileDownload触发的Primefaces commandButton来允许用户导出他的作品(作为序列化POJO)...只存在于视图范围内(只要因为它还没有出口!)

fileDownload XHTML模板:

<p:commandButton value="Save worksheet" icon="ui-icon-disk"
    ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)">
    <p:fileDownload
         value="#{applicationManager.applicationController.saveWorksheet()}" />
</p:commandButton>

saveWorksheet()方法

    @Override
    public StreamedContent saveWorksheet() {
    StreamedContent worksheetFile = null;
    try {
        String worksheetFilename = sessionDirectories + sessionId + "/worksheet.wbc";
        System.out.println("saveWorksheet");
        FileOutputStream fileOut = new FileOutputStream(worksheetFilename);
        ObjectOutputStream out = new ObjectOutputStream(fileOut);
        out.writeObject(historyList);
        out.close();
        fileOut.close();

        FileInputStream stream = new FileInputStream(worksheetFilename);
        worksheetFile = new DefaultStreamedContent(stream, "application/wbc", "worksheet.wbc");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return worksheetFile;
}

historyList只是历史记录的ArrayList)

此文件下载功能正常。问题是我使用Primefaces push来显示用户发送的命令的结果(因为我需要在共享相同URL片段的每个客户端上显示它)。但由于fileDownload触发的commandButton需要整页刷新,因此套接字会在下载开始时断开连接。

note :套接字连接在视图作用域的applicationManager bean中。

套接字XHTML模板:

<p:socket onMessage="handleOutput" channel="/terminalOutput"
            widgetVar="subscriber" />

套接字连接:

RequestContext.getCurrentInstance().execute("subscriber.connect('/" + sessionId + "')");

有没有办法让套接字连接在页面刷新后继续存在?有没有办法定义套接字的范围?

非常感谢您的帮助:)

此致

以星

0 个答案:

没有答案