4

我有两个豆子。第一个bean语言系统:

@Named(value = "languageOfSystem")
@SessionScoped
public class LanguageOfSystem implements Serializable {
   @Inject private JsfUtils eeJsfUtils;

第二bean,userBb:

@Named(value = "userBb")
@SessionScoped
public class UserBb implements Serializable, LangUpdInterface {
   @EJB
   private EjbUtils ejbUtils;
   @EJB
   private PuserFacade puserFacade;
   @Inject
   private Direction direction;
   @Inject
   private PortfelDao portfelDao;
   @Inject
   private LanguageOfSystem languageOfSystem;

我注入languageOfSystemuserBbNetBeans IDE 给我与注入一致的警告:

no enabled eligible for injection beans are found

但是我可以从languageOfSystemin调用方法userBb并且它工作正常。那么这个警告很重要,我应该改变吗?

还有第二个问题。我在这种情况下使用观察者设计模式,其中userBb是依赖项,并且languageOfSystem是具有依赖项列表的主题。我userBb通过调用适当的方法在主题列表中注册languageOfSystem。两个会话 bean 是否正确?

4

2 回答 2

4

但是我可以从 userBb 中的 languageOfSystem 调用方法,并且效果很好。

您的代码看起来没有错 - 它有效。所以这似乎是一个Netbeans的问题。

还有第二个问题。我在这种情况下使用观察者设计模式,其中 userBb 是依赖项,languageOfSystem 是具有依赖项列表的主题。我通过从 languageOfSystem 调用适当的方法在主题列表中注册 userBb。两个会话 bean 是否正确?

您是否知道 CDI 规范包含一个强大且类型安全的观察者模式实现?你绝对应该检查一下。

这里还有两件事要提到:

@Named(value = "languageOfSystem")
@Named(value = "userBb")
  1. 您提供的值已经是默认值。因此,您可以将其省略,而只需编写即可@Named
  2. 关于您发布的代码:@Named根本不需要 - 它所做的只是提供一个用于 JSF 的 EL 名称。如果您完全跳过@Named,您的代码将同样有效......
于 2012-05-10T08:34:06.327 回答
2

至于你的第一个问题:

这是一个已知的 netbeans 错误(请参见此处此处)。但是,第一个链接中的讨论表明这是焊接实现的问题,Netbeans 的警告是根据规范。

尽管如此,bugzilla 文件说它将在 Netbeans v7.2 中得到修复。

在此之前,您仍然可以禁用警告(工具 --> 选项 --> 编辑器 --> 提示

于 2012-05-10T08:32:30.030 回答