4

私は2つの豆を持っています。最初の Bean languageOfSystem:

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

2 番目の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;

に注入languageOfSystemするuserBbと、NetBeans IDE はその注入に沿って警告を表示します。

no enabled eligible for injection beans are found

しかし、私はからメソッドを呼び出すことができ、languageOfSystem正常userBbに動作します。では、この警告は重要であり、変更する必要がありますか?

そして2つ目の質問。この場合、オブザーバー デザイン パターンを使用します。ここで、userBbは従属であり、 は従属languageOfSystemのリストを持つサブジェクトです。userBbから適切なメソッドを呼び出してサブジェクト リストに登録しlanguageOfSystemます。2 つのセッション Bean に関しては正しいですか?

4

2 に答える 2

4

しかし、userBbのlanguageOfSystemからメソッドを呼び出すことはでき、正常に機能します。

あなたのコードは間違って見えません-そしてそれは機能します。したがって、これはNetbeansの問題のようです。

そして2番目の質問。この場合、userBbが依存し、languageOfSystemが依存のリストを持つサブジェクトであるオブザーバーデザインパターンを使用します。languageOfSystemから適切なメソッドを呼び出して、userBbをサブジェクトリストに登録します。2つのセッションBeanに関しては正しいですか?

CDI仕様には、オブザーバーパターンの強力でタイプセーフな実装が含まれていることをご存知ですか?あなたは間違いなくこれをチェックする必要があります。

そして、ここで言及するもう2つのこと:

@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 に答える