2014-10-17 32 views
3

我有一個小型的大學項目,我必須展示某些算法是如何工作的。決定將JSF用於簡單的Web應用程序,並將所有算法生成的數據保存到數據庫中。對象改變狀態時觸發Ajax事件

我心想:「嘿,這將是冷靜,如果我可以表明,該算法是如何工作的一步一步,沒有什麼特別的,只是當算法做了一件事情改變了純文本格式的用戶。使用Ajax的輸出文本字段應該能夠完成工作!',但我無法解決某個問題。 Ajax觸發某個事件發生時,比如'click'或'keyup',但是有什麼辦法讓我的ManagedBean類中的對象發生變化時觸發它?

如果我解釋說不夠好,我不知道,所以這裏是什麼,我想要做的一個例子:

  1. 在ManagedBean一個ArrayList是空的,我們將outputText打印出什麼
  2. 一定的後的時間量,一個新的對象被保存在ArrayList中,Ajax的觸發器和所述的outputText打印出其onString()
  3. 一定量的時間再次,相同的對象,該對象被改變之前打印出來之後,Ajax的觸發和的outputText相應變化

對不起,如果問題不太清楚,儘量用我的能力來描述它。

回答

0

你描述的不是經典,客戶端觸發AJAX了,但被稱爲server-sent events(SSE)。它們通常使用長輪詢(週期性客戶端請求,如果存在服務器端事件才能得到答案)來實現。

你最喜歡的JSF工具可能支持它的名字「推」下。這是一個Primefaces example

但是,對於您的簡單的使用情況下,我建議使用輪詢來代替。見this example。主要區別在於您的服務器端邏輯切換爲保留「待顯示」字符串/ ID /對象列表。當您的瀏覽器客戶端輪詢服務器(偵聽器方法被調用)時,將第一個項目分配給backing bean中的String字段,並讓客戶端重新呈現顯示此String的區域。

注意,您可以在普通的JSF-2做到這一點,就沒有必要Primefaces。