我想知道如何创建“组件范围”的bean,或者说是复合组件实例中的“复合组件内的局部变量”,并且只要该实例生存住。
以下是更多细节,通过示例解释:
假设有一个“计算器”组件 - 允许用户输入数学表达式并评估其值的东西。可选地,它还绘制相关函数。
我可以创建一个具有以下内容的复合组件:
显然是一种独立的功能;所以想要使用它的人可能会说< math:expressionEvaluator />
但显然,实现需要一个java对象 - 评估表达式的东西,计算绘图点的东西等等 - 我想它可以是一个bean - 只为这个 此组件的实例,而不是在组件的所有实例之间共享的视图范围或请求范围的bean。
如何创建这样的bean?复合材料组件是否可以实现这一点?
答案 0 :(得分:0)
没有“每个组件实例”范围。但你仍然可以达到预期的效果。
使用ViewScoped bean进行评估和绘图 - 这些函数是“无状态的”,因此由您的输入提供。
您的输入将由用户提供的bean支持 - 与文本框或日历窗口小部件需要绑定到用户提供的bean的输入框的方式相同。这保存了您的“无状态”视图结构bean所处理的数据。
如果你真的想保留组件中包含的所有东西,我猜你可以用一个ViewScoped bean来支持输入,该bean包含一个由输入id键入的映射。不确定这是否会奏效。
答案 1 :(得分:0)
或者,您也可以构建基于Java的自定义UIComponent。虽然这些在JSF 1.x中需要大量的“移动部件”,但在JSF 2.0和Facelets中,它们实际上并没有太多的工作要构建。
通常,在构建基于Java的自定义UIComponent时,应该适度,因为对于大多数用例,复合组件更容易,更直接。但是,基于Java的UIComponents仍然有它们的用途,并且进行实际计算可能是这样的用途。