我正在编写一个定义了自定义ComboBox的应用程序(我们称之为MyComboBox)。我想在两个不同的面板中分别使用它(假设APanel和BPanel)。注入层次结构如下:

BPanel has MyComboBox injected
MyWindow has BPanel injected
APanel has MyWindow AND MyComboBox injected


问题是我向BPanel的MyComboBox添加了不同的侦听器/操作,向APanel的MyComboBox添加了不同的侦听器/操作,但是由于它在一个“注入狂潮”内,因此仅创建了MyComboBox的一个实例,并且共享了所有侦听器。

我已经尝试过将changin范围从@Dependant(默认值)更改为@RequestScoped,但没有帮助。

我自己发现了两种解决此问题的方法:


使用标准Java构造函数手动创建组合框。
使MyComboBox抽象,并创建两个扩展它的类,例如:

MyAPanelComboBox扩展了MyCombobox {
//这里不需要
}

MyBPanelComboBox扩展了MyCombobox {
//这里不需要
}


上述两种方法都不能令我满意,我想知道是否存在一种简单,干净的方法来解决我的问题。

最佳答案

我现在无法尝试,但是如果我正确地用MyComboBox注释@Dependant类(或没有任何注释)应该可以。

无论如何,可能有一种解决方法

@Inject
private Instance<MyCombobox> comboxboxInstance;


并获得新的实例

comboxboxInstance.get();

08-06 05:15