如何有效地重用JSF(1.2)页面及其支持bean?

时间:2012-02-03 21:43:48

标签: java jsf java-ee jsf-1.2

我知道这个问题更多的是一个待讨论的问题,而不是一个可以回答的问题,但我无法重新解释这个问题,使其更具体。

我目前正在开发基于JSF 1.2的页面,我正在思考如何有效地重用部分页面。我提出了以下想法(示例场景):

第1页由三部分组成,第2页也是如此。 我在单独的文件中提取了这三个部分,并将它们包含在第1页和第2页(使用<ui:include />)。

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

此时我正在考虑如何重用后备bean,我提出了以下想法:

每个页面都有自己的支持bean,我们称之为Bean 1(针对第1页)和Bean 2(针对第2页)。

我为每个Part定义了一个接口。所以我有第一部分的一个接口(称为接口1),第二部分的第二个接口(称为接口2),依此类推。这些接口定义了其所需的所有方法。 F.ex.如果第1部分在JSF站点(String)中需要属性“test”(a <h:outputText value="#{bean.test}" />),则接口1定义一个名为public String getTest();的方法。

所以我的基本想法是,如果第1页包含第1部分,其支持bean(Bean 1)必须实现接口1。 在我的场景中,第1页的支持bean将实现接口1,2和3.它们也将实现接口1,2和3。

所以到目前为止,支持bean中的代码仍然是多余的,我想避免。 为了解决这个问题,我为接口1,2和3创建了抽象实现,称为抽象第1部分,依此类推。

这个抽象类将由Bean 1和2扩展.Bean 1和2只会覆盖与抽象实现不同的方法(负责加载数据的f.ex.方法 - 在上面的示例中{{1}可以重写为第1页和第2页提供不同的数据。

所以我的最终解决方案很安静。现在我的“问题”:这是重用后备bean的好方法吗?有没有更好的解决方案?

亲切的问候

stupidSheep

1 个答案:

答案 0 :(得分:0)

如果我正在创建一个我打算在多个页面中重复使用的页面片段*,我通常会为片段创建一个支持bean,并通过params(和Seam DI)传递片段所需的任何上下文信息。不适合你):

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

这样你的页面bean就不需要实现任何片段的功能了。

*很抱歉使用术语片段,我不是指<ui:fragment>标签,而是页面的任意部分。