web-dev-qa-db-ja.com

WELD-001408:修飾子@Defaultを持つタイプCustomerの依存関係が満たされていない

私はJava EE初心者です。 JSFをテストしたいので、簡単なプログラムを作成しましたが、デプロイできません。次のエラーメッセージが表示されます。

cannot Deploy onlineshop-war
deploy is failing=Error occurred during deployment: Exception while loading the app : CDI deployment failure:WELD-001408: Unsatisfied dependencies for type Customer with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private de.Java2enterprise.onlineshop.RegisterController.customer
at de.Java2enterprise.onlineshop.RegisterController.customer(RegisterController.Java:0)
. Please see server.log for more details.

私のコードは次のとおりです:Customer.Java:

package de.Java2enterprise.onlineshop.model;

public class Customer {
    private String email;
    private String password;
}

registerController.Java:

package de.Java2enterprise.onlineshop;

import Java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.inject.Inject;
import de.Java2enterprise.onlineshop.model.*;

@Named
@RequestScoped
public class RegisterController {

    private static final long serialVersionUID = 1L;

    @Inject
    private Customer customer;

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public String persist() {
        return "/index.xhtml";
    }
}

コンパイルするには、cdi-api.jarを外部ライブラリとして含める必要がありました。ここで私を助けてくれる人はいますか?よろしくお願いします。

34
mike128

Customerクラスは、CDIによってBeanとして検出される必要があります。そのためには、2つのオプションがあります。

  1. その上に bean定義アノテーション を付けます。 @Modelはステレオタイプであるため、トリックを行う理由です。 @Namedのような修飾子は、Beanを定義するアノテーションではありません。これが機能しない理由

  2. Jarにbeans.xmlファイルを追加して、 beanアーカイブ内のBean検出モード をデフォルトの「注釈付き」から「すべて」に変更します。

@Namedの使用方法は1つだけであることに注意してください。BeanをUIに公開します。その他の使用法は、悪い慣習やレガシーフレームワークとの互換性のためです。

57

私は同じ問題を抱えていましたが、注釈とは何の関係もありませんでした。コンテナ内のBeanのインデックス作成中に問題が発生しました(Jboss EAP 6.3)。 Java 8機能を使用しているため、私のBeanの1つをインデックスに登録できませんでした。

警告[org.jboss.as.server.deployment] ...クラスのインデックスを作成できませんでした... Java.lang.IllegalStateException:Unknown tag! pos = 20 poolCount = 133

その後、注入ポイントでエラーが発生しました:

修飾子@Defaultを持つタイプ...の満たされていない依存関係

解決策は、Java注釈インデックスを更新することです。 jandexの新しいバージョン(jandex-1.2.3.Final以降)をダウンロードしてから、

JBOSS_HOME\modules\system\layers\base\org\jboss\jandex\mainそして、module.xmlの新しいファイルへの参照を更新します

注:EAP 6.4.xでは、すでにこれが修正されています

0
Mr.Q

また、適切なインポートがあることを確認することも良いことです

私はそのような問題を抱えていて、豆が使用していることがわかりました

    javax.faces.view.ViewScoped;
                 ^

の代わりに

    javax.faces.bean.ViewScoped;
                 ^

1つのWordで世界が台無しになることもありますが、この場合は1日で台無しになります。

0
Sirmyself