私は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を外部ライブラリとして含める必要がありました。ここで私を助けてくれる人はいますか?よろしくお願いします。
Customer
クラスは、CDIによってBeanとして検出される必要があります。そのためには、2つのオプションがあります。
その上に bean定義アノテーション を付けます。 @Model
はステレオタイプであるため、トリックを行う理由です。 @Named
のような修飾子は、Beanを定義するアノテーションではありません。これが機能しない理由
Jarにbeans.xml
ファイルを追加して、 beanアーカイブ内のBean検出モード をデフォルトの「注釈付き」から「すべて」に変更します。
@Namedの使用方法は1つだけであることに注意してください。BeanをUIに公開します。その他の使用法は、悪い慣習やレガシーフレームワークとの互換性のためです。
私は同じ問題を抱えていましたが、注釈とは何の関係もありませんでした。コンテナ内の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では、すでにこれが修正されています
また、適切なインポートがあることを確認することも良いことです
私はそのような問題を抱えていて、豆が使用していることがわかりました
javax.faces.view.ViewScoped;
^
の代わりに
javax.faces.bean.ViewScoped;
^
1つのWordで世界が台無しになることもありますが、この場合は1日で台無しになります。