8

我做了一些阅读和游戏,但我仍然有一些问题希望有人能回答:

那么,我可以在一个 JSF 页面中使用两个或更多的支持 bean 吗?

<h:intputText value="#{myFirstBean.firstProperty}" />
<h:intputText value="#{mySecondBean.secondProperty}" />

如果可以,我为什么不这样做?(我想我不应该,因为没有人这样做)

如果我不能,为什么?

另外,我在某处读到类似“在页面加载时,框架将实例化支持 bean,如果它是回发则填充它”。他们说支持 bean 但我不明白框架如何知道要实例化哪个支持 bean。

4

3 回答 3

5

让我们澄清一些术语:

  • 托管 bean是您可以使用托管 bean 工具配置的 JavaBeans 组件,请参阅
  • backing beans是一个 JavaServer Faces 托管 bean,与特定页面中使用的 UI 组件相关联,请参阅

所以,是的,您可以在单个 JSF 页面中使用两个或多个托管 bean,但是将与一个页面相关的 UI 组件绑定、侦听器、逻辑等拆分为两个或多个支持 bean 仍然是可行的,但非常不可取,并且可能会导致您很多问题和糟糕的代码。

于 2009-12-10T20:14:29.950 回答
4

为什么不?这是一件完全合法的事情。通常,一个页面应该与一个 bean 相关联(为了结构良好),但是如果你想在每个页面上显示当前时间,你可以自由引用你的timeBean.currentTime,除其他外(当然,在这里最好使用包含/模板)。

于 2009-12-10T20:08:48.587 回答
2

其他问题已经回答了。然而:

另外,我在某处读到类似“在页面加载时,框架将实例化支持 bean,如果它是回发则填充它”。他们说支持 bean,但我不明白框架如何知道要实例化哪个支持 bean。

bean 由它们的名称解析。例如,#{myFirstBean.firstProperty}查找名为“myFirstBean”的 bean(类的实例MyFirstBean)。您可以调整名称,如下所示:

@ManagedBean(name = "foo")
public class SomeClass { ... }

然后你可以通过#{foo.firstProperty}.

于 2010-08-18T11:41:26.990 回答