WELD-001408: dépendances insatisfaites pour le type de client avec les qualificatifs @Default

Je suis un débutant de Java EE. Je veux tester JSF et donc fait un programme simple mais ne peut pas le déployer. Je reçois le message d'erreur suivant:

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.

Mon code est comme suit: Client.java:

package de.java2enterprise.onlineshop.model;

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

registrercontroller.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";
    }
}

pour le compiler, j'ai dû inclure l'api cdi.bocal comme une bibliothèque externe. Quelqu'un ici qui pourrait m'aider? Je vous remercie tous à l'avance.

24
demandé sur Gilberto 2015-02-05 22:32:12

4 réponses

  1. Mettre un haricot définition de l'annotation. @Model est un stéréotype c'est pourquoi il fait le tour. Un qualificatif comme @Named n'est pas un haricot définition de l'annotation, la raison pourquoi ça ne marche pas

  2. Changer mode de découverte du haricot dans votre archive du haricot à partir de la valeur par défaut "annoté" à "tous" par l'ajout d'un beans.xml le fichier dans votre bocal.

gardez à l'esprit que @Named n'a qu'un usage : exposer votre haricot à L'interface utilisateur. D'autres utilisations sont pour la mauvaise pratique ou la compatibilité avec le cadre d'héritage.

43
répondu Antoine Sabot-Durand 2015-02-06 06:40:24

c'est aussi une bonne chose, assurez-vous que vous avez le droit d'importation

j'ai eu un problème comme ça et j'ai découvert que le haricot utilisait

    javax.faces.view.ViewScoped;

au lieu de

    javax.faces.bean.ViewScoped;

Un seul mot peut ruiner le monde parfois... ou simplement ruiner ma journée dans ce cas.

0
répondu Sirmyself 2017-04-04 18:34:26

vous devez annoter votre classe de clients avec l'annotation @Named ou @Model:

package de.java2enterprise.onlineshop.model;
@Model
public class Customer {
    private String email;
    private String password;
}

ou de créer/modifier des haricots.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
   bean-discovery-mode="all">
</beans>
-1
répondu Sergey Vinichenko 2015-02-05 19:48:43

pour injecter un objet, sa classe doit être connue du mécanisme CDI. Habituellement, l'ajout de l'annotation @Named fera l'affaire.

-2
répondu Heiner Westphal 2015-02-05 19:46:35