我解决了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