【问题标题】:Can we have a component-scoped bean in a JSF2 composite component?我们可以在 JSF2 复合组件中拥有一个组件范围的 bean 吗?
【发布时间】:2011-03-01 03:41:53
【问题描述】:

我想知道如何创建“组件范围”bean,或者可以说,“复合组件内的局部变量”,它们对复合组件的实例是私有的,并且与该实例一样长生活。

以下是更多细节,并举例说明:

假设有一个“计算器”组件 - 允许用户输入数学表达式并计算其值的东西。可选地,它还绘制关联的函数。

我可以制作一个复合组件,它具有:

  • 接受数学表达式的文本框
  • 两个按钮分别称为“评估”和“绘图”
  • 绘制函数的另一个嵌套组件

这显然是一个独立的函数;所以想要使用它的人可能只是说

但显然,实现将需要一个 java 对象 - 评估表达式的东西,计算绘图点的东西等 - 我想它可以是一个 bean - 仅适用于 this this 组件的实例,而不是在组件的所有实例之间共享的视图范围或请求范围的 bean。

如何创建这样的 bean?复合组件也能做到这一点吗?

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    或者,您也可以构建一个基于 Java 的自定义 UIComponent。尽管这些在 JSF 1.x 中需要大量的“移动部件”,但在 JSF 2.0 和 Facelets 中,它们实际上并没有那么多工作要做。

    通常,在构建基于 Java 的自定义 UIComponents 时应该是适度的,因为对于大多数用例来说,复合组件更容易和更直接。但是,基于 Java 的 UIComponents 仍然有它们的用途,进行实际计算可能就是这样的用途。

    【讨论】:

    【解决方案2】:

    没有“每个组件实例”范围。但是你仍然可以达到你想要的效果。

    使用 ViewScoped bean 进行评估和绘图 - 这些函数是“无状态的”,因此由您的输入提供。

    您的输入将由用户提供的 bean 支持 - 就像文本框或日历小部件需要一个绑定到用户提供的 bean 的输入框一样。这包含您的“无状态”视图范围 bean 所作用的数据。

    如果您真的想保留组件中包含的所有内容,我想您可以使用 ViewScoped bean 来支持输入,该 bean 包含由输入 id 键入的映射。不过不确定这是否可行。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 2012-12-20
      • 2023-02-14
      • 2019-07-10
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多