一页上的JSF多个支持bean

时间:2009-12-10 19:41:09

标签: java jsf facelets

我做了一些阅读和演奏,我仍然有一些问题,我希望有人可以回答:

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

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

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

如果我不能,为什么?

另外,我在某处阅读“在页面上加载框架将实例化支持bean,并填充它,如果它是一个回发”。他们说 支持bean但是我无法理解框架如何知道哪个支持bean来实例化。

3 个答案:

答案 0 :(得分:4)

让我们澄清一些术语:

  • 托管bean 是可以使用托管bean工具see
  • 配置的JavaBeans组件
  • 支持bean ,是与特定页面中使用的UI组件关联的JavaServer Faces托管bean see

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

其他问题已经得到解答。但是:

  

另外,我在某处阅读“在页面上加载框架将实例化支持bean,并填充它,如果它是一个回发”。他们说支持bean但我无法理解框架如何知道要实例化哪个支持bean。

豆子的名字已经解决了。例如,#{myFirstBean.firstProperty}查找名为'myFirstBean'的bean(类MyFirstBean的实例)。您可以按以下方式调整名称:

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

然后你可以通过#{foo.firstProperty}引用它。