2015-07-20 108 views
0

我在当前可用版本中使用Tomcat和PrimeFaces。如何将bean对象/值传递给jsf(xhtml)页面?

我正面临这个问题,我无法从托管bean异步发送一个值到它的xhtml页面。
这是从我的XHTML页面一个代码段:

<p:inputTextarea id="transcriptionResult" rows="4" cols="120" 
        value="#{transcriptionTabView.currentTranscritpion}" /> 

这是异步调用重新/设置managedbean“transcriptionTabView”中的对象/值的方法。其中包含一个名为的对象Transcription currentTranscription

@Override 
public void trascriptionReady(Transcription t) { 
    this.currentTranscription = t; 
} 

我认为这将足以重置视图,但什么都没有发生。

+0

您需要发表更多的代码。你在哪里调用方法trascriptionReady(转录t)?你在哪里更新inputTextarea? –

+0

@EmilKaminski'transcriptionReady(Transcription t)'方法由异步事件处理程序调用。我想如果我的bean中有getter和setter方法,'this.currentTranscription'上的每个修改都会在我的JSF上触发更新事件。但那不行。 – Kami

+0

@BalusC感谢您的提示,但是是否也可以调用此代码'EventBus eventBus = EventBusFactory.getDefault()。eventBus(); \t \t eventBus.publish(“/ subscriber”,htmlMessage);例如,没有按下',但是在'transcriptionReady(t)'内调用代码?“ – Kami

回答

2

我解决了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以对传入数据执行某些操作。

如果我错了,请纠正我。我对此很陌生。

相关问题