我知道这个问题更多的是一个待讨论的问题,而不是一个可以回答的问题,但我无法重新解释这个问题,使其更具体。
我目前正在开发基于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
答案 0 :(得分:0)
如果我正在创建一个我打算在多个页面中重复使用的页面片段*,我通常会为片段创建一个支持bean,并通过params(和Seam DI)传递片段所需的任何上下文信息。不适合你):
<ui:include scr="/common/myfragment.xhtml">
<ui:param name="property" value="#{pageBean.property}" />
</ui:include>
这样你的页面bean就不需要实现任何片段的功能了。
*很抱歉使用术语片段,我不是指<ui:fragment>
标签,而是页面的任意部分。