Java 我们可以在JSF2复合组件中有一个组件范围的bean吗?

Java 我们可以在JSF2复合组件中有一个组件范围的bean吗?,java,jsf,jsf-2,Java,Jsf,Jsf 2,我想知道如何创建“组件范围的”bean,或者说“复合组件内的局部变量”,它们是复合组件实例的私有对象,并且在该实例存在的时间内一直存在 下面是更多的细节,用一个例子解释: 假设有一个“计算器”组件,它允许用户输入数学表达式并计算其值。还可以选择绘制相关函数 我可以制作一个复合组件,该组件具有: 用于接受数学表达式的文本框 两个按钮称为“评估”和“绘图” 另一个绘制函数的嵌套组件 它显然是一项独立的功能;所以想用它的人可以说 但是很明显,实现需要一个java对象——计算表达式的对象,计算绘图点

我想知道如何创建“组件范围的”bean,或者说“复合组件内的局部变量”,它们是复合组件实例的私有对象,并且在该实例存在的时间内一直存在

下面是更多的细节,用一个例子解释:

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

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

  • 用于接受数学表达式的文本框
  • 两个按钮称为“评估”和“绘图”
  • 另一个绘制函数的嵌套组件
它显然是一项独立的功能;所以想用它的人可以说

但是很明显,实现需要一个java对象——计算表达式的对象,计算绘图点的对象,等等——我想它可以是一个bean范围的对象,只针对这个组件的实例,而不是一个视图范围或请求范围的bean,它在组件的所有实例之间共享

我如何创建这样一个bean?对于复合组件,这可能吗?

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

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

您的输入将由用户提供的bean支持——就像文本框或日历小部件需要绑定到用户提供的bean的输入框一样。这将保存“无状态”ViewScope bean所处理的数据


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

或者,您也可以构建一个自定义的基于Java的UIComponent。尽管在JSF1.x中需要大量的“活动部件”,但在JSF2.0和Facelets中,它们实际上并没有太多的工作要做


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

您是否有任何关于如何在JSF 2.0中构建自定义组件的参考资料?这是JSF 2.0中基于Java的组件的一个简单启动示例: