2008-11-03 63 views
2

這裏的坐:如何讓多個組件響應JSF中的單個事件?

  • 我有一個JSF組件,它基本上是一個列表「文件」
  • 我有相同的頁面上的任何數量的文件瀏覽器組件。
  • 這些組件都沒有「彼此瞭解」。換句話說,它們不能在設計時被配置爲彼此鏈接或類似的東西。

當用戶點擊文檔鏈接時,我希望通知每個文檔查看器組件。

基本上這個想法是讓文檔查看器發佈一個事實,即他們偵聽文檔列表組件將觸發的某種類型的事件(「DocumentSelectedEvent」說)。

我可以考慮做這些不是JSF特定的方法,但我想知道如果JSF事件模型可以處理這種事情。

任何人有任何想法?

回答

1

我不認爲有這樣的標準JSF事件模型的方式。

有沒有什麼辦法可以將組件綁定到支持bean?這樣當事件發生時,你可以通過你的組件列表並通知它們中的每一個。

+0

所以,當一個事件發生時,你可以運行一些可以訪問輔助bean的代碼,它可以迭代頁面上的項目(支持bean)並且可能對它們做些事情,對它們啓動方法等。原因可能工作.. – SCdF 2008-11-04 00:29:48

0

ValueChangeEvent

我不知道你是如何實現你的文件列表,但如果它是說一個下拉列表或任何其他的多項目列表組件,您可以做一個值更改事件並強制提交變化的組成部分。然後在頁面代碼支持bean中,您可以調用您的查看器的方法來加載任何您喜歡的內容。

在您的jsf中,您只需指定您在輔助bean中寫入的值更改處理程序。

/** 
    * Handle document click value change. 
    * 
    * @param valueChangedEvent the value changed event 
    */ 
    public void handleDocumentSelect(ValueChangeEvent valueChangedEvent) { 
     String selectedDocument = valueChangedEvent.getNewValue(); 

     doDocViewer1DisplayMethod(selectedDocument); 
       doDocViewe2DisplayMethod(selectedDocument); 


    } 

修改您的jsf標籤以使用您的新值更改事件處理程序並強制提交。

<f:componentTag 
    attr=xxx 
    attr=xxx 
    valueChangeListener="#{pc_BackingBean.handleDocumentSelect}" 
    onChange=submit();> 
1

您只需將組件與支持bean綁定在一起,並使用ValueChangeListener通知支持bean。偵聽器方法可以更改綁定到各個UI組件的其他組件的狀態。

你是否試圖以「Ajax」的方式做到這一點,而沒有明確提交頁面?

+0

WRT阿賈克斯,當時我是啊。基本上,我們做了一個尖峯來看待在幾乎門戶/類似portlet的場景中使用JSF作爲組件框架。所以我們希望組件能夠「發佈」它們消耗的事件,並讓其他組件生成這些事件,而不需要鏈接組件。 – SCdF 2009-06-25 23:20:39