2010-06-08 73 views
3

我想知道如何創建「組件範圍」的bean,或者說,對於複合組件實例私有的「複合組件內的局部變量」,並且只要該實例存在。我們可以在JSF2複合組件中擁有組件範圍的bean嗎?

下面是更多的細節,解釋一個例子:

假設有一個「計算器」組件 - 這允許用戶在鍵入一個數學表達式,並評估其價值。可選地,它也繪製關聯的函數。

我可以使具有複合部件:

  • 用於接受數學表達式
  • 兩個按鈕被稱爲「評價」一文中,和「繪圖」
  • 繪出的另一個嵌套組件功能

它顯然是一個獨立的功能塊;讓誰願意使用它也許有人只是說<數學:的ExpressionEvaluator/>

但很明顯,實施將需要一個Java對象 - 這是計算表達式,一些計算上的描繪點,等等 - 我想象一下,它可以是一個bean,範圍是這個這個的實例,而不是在組件的所有實例之間共享的視圖範圍或請求範圍的bean。

如何創建這樣的bean?甚至有可能使用複合組件?

回答

0

沒有「每個組件實例」範圍。但是你仍然可以達到你想要的效果。

使用ViewScoped bean來進行評估和繪圖 - 這些功能是「無狀態的」,因此您的輸入會提供這些功能。

您的輸入將由用戶提供的bean支持 - 與文本框或日曆小部件需要綁定到用戶提供的bean的輸入框相同。這保存了你的「無狀態」viewcoped bean所作用的數據。

如果你真的想保留組件中包含的所有內容,我想你可以用包含由輸入ID鍵入的映射的ViewScoped bean來支持輸入。不知道這是否會工作。

0

或者,您也可以構建一個基於自定義Java的UIComponent。雖然這些在JSF 1.x中需要大量的「移動部分」,但在JSF 2.0和Facelets中,它們實際上並不需要太多工作來構建。

通常,在構建基於Java的自定義UIComponents時應該適中,因爲對於大多數用例來說,複合組件更簡單,更直接。但是,基於Java的UIComponents仍然有其用處,並且做實際的計算可能就是這樣的用途。

+0

你有沒有關於如何在JSF 2.0中構建自定義組件的任何參考? – 2011-10-19 20:07:47

+0

這是一個在JSF 2.0中基於Java的簡單啓動示例:http://jdevelopment.nl/simple-java-based-jsf-custom-component/ – 2011-10-25 10:49:04

相關問題