2015-07-20 103 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以對傳入數據執行某些操作。

如果我錯了,請糾正我。我對此很陌生。

相關問題