我使用由fileDownload
触发的Primefaces commandButton
来允许用户导出他的作品(作为序列化POJO)...只存在于视图范围内(只要因为它还没有出口!)
<p:commandButton value="Save worksheet" icon="ui-icon-disk"
ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)">
<p:fileDownload
value="#{applicationManager.applicationController.saveWorksheet()}" />
</p:commandButton>
@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中。
<p:socket onMessage="handleOutput" channel="/terminalOutput"
widgetVar="subscriber" />
RequestContext.getCurrentInstance().execute("subscriber.connect('/" + sessionId + "')");
有没有办法让套接字连接在页面刷新后继续存在?有没有办法定义套接字的范围?
非常感谢您的帮助:)
此致
以星