2012-02-03 73 views
0

我知道這個問題更多是一個待討論的問題而不是被回答的問題,但我無法改變問題以使其更加具體。如何有效地重用JSF(1.2)頁面及其支持bean?

我目前正在開發基於JSF 1.2的頁面,並且正在考慮如何有效地重用部分頁面。我提出了以下想法(示例場景):

Page 3由三部分組成,對於頁面2也是如此。我將這三部分分別提取到不同的文件中,並將它們包含在第1頁和第2頁(使用<ui:include />)。

因此,第1頁包括第1,2和3部分,第2頁包括第1部分,第2部分和第3部分(它們是相同的)。

在這一點上,我就在想如何重用的支持豆類和我想出了以下的想法:

每個頁面都有自己的後臺bean,我們稱之爲豆1(第1頁)和豆2 (用於第2頁)。

我爲每個零件定義了一個接口。所以我有一個接口(稱爲接口1)用於部分1,另一個接口(稱爲接口2)用於部分2等等。這些接口定義了其部分所需的所有方法。 F.ex.如果第1部分要求JSF站點(<h:outputText value="#{bean.test}" />)中的屬性「test」(String),則接口1定義了一個名爲public String getTest();的方法。

所以我的基本思想是,如果頁面1包括第1部分,其支持bean(Bean 1)必須實現接口1。 在我的場景中,頁面1的支持bean將實現接口1,2和3. Page 2將實現接口1,2和3。

因此到目前爲止,支持bean的代碼仍然是多餘的,我想避免這種情況。 爲了解決這個問題,我爲接口1,2和3創建了抽象實現,稱爲Abstract Part 1等等。

這個抽象類將被Bean 1和2擴展。Bean 1和2只會覆蓋與抽象實現不同的方法(f.ex.負責加載數據的方法 - 在上面的示例public String getTest();中可以是被重寫爲第1頁和第2頁提供不同的數據)。

所以我最終的解決方案是安靜的複雜。現在我的「問題」:這是重用支持bean的好方法嗎?有人有更好的解決方案嗎?

親切的問候

stupidSheep

回答

0

如果我創建一個頁面片段*,我打算重新使用在多個頁面,我通常只是爲片段創建一個後臺bean,並通過所需的任何上下文信息通過PARAMS片段(和Seam DI但可能不會對您可行的):

<ui:include scr="/common/myfragment.xhtml"> 
    <ui:param name="property" value="#{pageBean.property}" /> 
</ui:include> 

這樣,你的頁面bean不需要實現任何的片段的功能。

*對不起,使用術語片段,我並不是指<ui:fragment>標籤,而是頁面的任意部分。

+0

感謝您的回答。你能解釋我如何處理一頁的各種支持豆嗎?即如果你有第1頁由3部分組成,並且每個部分都有它的bean,那麼就是第1頁。所以總的來說你有四個豆子。頁面1的bean如何訪問每個部分的bean(fragment *)?你如何處理這個問題? – stupidSheep 2012-02-04 14:39:32

+0

我不給「部分」bean提供「頁面1」bean訪問權限。相反,如上所述,我給'部分'bean訪問'頁面1'bean的信息。 – 2012-02-06 19:42:37

+0

如果你想要,你可以創建'Page 1'bean的'part'beans屬性,並將'part'bean作爲ui:param來傳遞給fragment。 – 2012-02-06 19:43:30

相關問題