我解決了PrimeFaces的Push功能問題。 隨着BalusC的提示,我閱讀了PrimeFaces第9章的UserGuide。PrimeFaces Push PDF並觀看了這個video教程。 這些是我爲解決問題所做的步驟。
步驟1: 我加入我的TranscriptionTabView-豆內的以下方法:
public void pushMessage() {
EventBus eventBus = EventBusFactory.getDefault().eventBus();
eventBus.publish("/resultreceiver", result);
System.out.println("Message Sent at " + new Date());
}
步驟2. 我創建了一個接收器 - Bean來接收我的推送的消息:
@PushEndpoint(value = "/resultreceiver")
public class TranscriptionResultReceiver {
@OnMessage(encoders = { JSONEncoder.class })
public String onMessage(String message) {
return message;
}
}
第3步。 我加了一個<p:inputTextarea>
部件到我JSF顯示消息: <p:inputTextarea rows="6" cols="60" id="transcriptionResult" value="#{transcriptionTabView.result}"> </p:inputTextarea>
步驟4. 插座添加到其等待傳入消息的JSF: <p:socket channel="/resultreceiver" onMessage="handleMessage"></p:socket>
確保通道是相同的如Receiver-Bean中提到的@PushEndpoint註釋。
第5步。 當TranscriptionTabView-Bean推送消息時,將以下javascript方法添加到由socket標記調用的JSF中。
<script type="text/javascript">
function
handleMessage(data){
document.getElementById(<GENERATED_ID OF INPUTTEXTAREA>).value=data;
}
</script>
正如我理解通過閱讀userguide和觀看YouTube視頻,在TranscriptionTabView方法pushMessage打開一個信道到JSF和發送使用eventBus.publish("/resultreceiver", message);
在客戶端套接字標籤等待上的傳入消息的消息給定頻道,如果發生onMessage
事件,則調用javascript方法handleMessage
以對傳入數據執行某些操作。
如果我錯了,請糾正我。我對此很陌生。
您需要發表更多的代碼。你在哪裏調用方法trascriptionReady(轉錄t)?你在哪裏更新inputTextarea? –
@EmilKaminski'transcriptionReady(Transcription t)'方法由異步事件處理程序調用。我想如果我的bean中有getter和setter方法,'this.currentTranscription'上的每個修改都會在我的JSF上觸發更新事件。但那不行。 – Kami
@BalusC感謝您的提示,但是是否也可以調用此代碼'EventBus eventBus = EventBusFactory.getDefault()。eventBus(); \t \t eventBus.publish(「/ subscriber」,htmlMessage);例如,沒有按下'
,但是在'transcriptionReady(t)'內調用代碼?「 – Kami