qualifier managedproperty example beans jsf java-ee dependency-injection cdi managed-bean

jsf - managedproperty - WELD-001408: dependencias insatisfechas para el tipo Cliente con calificadores @Default



request scope java ee (5)

Debe anotar su clase de cliente con la anotación @Named o @Model:

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

o crear / modificar beans.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>

Soy un novato de Java EE. Quiero probar JSF y, por lo tanto, hice un programa simple pero no puedo implementarlo. Recibo el siguiente mensaje de error:

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.

Mi código es el siguiente: 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"; } }

Para compilarlo tuve que incluir cdi-api.jar como una biblioteca externa. ¿Alguien aquí podría ayudarme? Gracias a todos de antemano.


El CDI debe descubrir su clase de Customer como un bean. Para eso tienes dos opciones:

  1. Ponga un bean que define la anotación en él. Como @Model es un estereotipo, es por eso que hace el truco. Un calificador como @Named no es una anotación que define el bean, por lo que no funciona

  2. Cambie el modo de descubrimiento de beans en su archivo de bean desde el valor predeterminado "anotado" a "todos" agregando un archivo beans.xml en su jar.

Tenga en cuenta que @Named solo tiene un uso: exponga su bean a la interfaz de usuario. Otros usos son para malas prácticas o compatibilidad con el marco heredado.


Para inyectar un Objeto, su clase debe ser conocida por el mecanismo CDI. Usualmente, agregar la anotación @Named hará el truco.


También es bueno asegurarse de tener la importación correcta

Tuve un problema como ese y descubrí que el bean estaba usando

javax.faces.view.ViewScoped;

en lugar de

javax.faces.bean.ViewScoped;

Una sola palabra puede arruinar el mundo a veces ... o simplemente arruinar mi día en este caso.


Tuve el mismo problema pero no tenía nada que ver con las anotaciones. El problema ocurrió al indexar beans en mi contenedor (Jboss EAP 6.3). Uno de mis beans no pudo ser indexado porque usaba las características de Java 8 y recibí esta pequeña advertencia astuta mientras implementaba:

WARN [org.jboss.as.server.deployment] ... No se pudo indexar la clase ... java.lang.IllegalStateException: ¡Etiqueta desconocida! pos = 20 poolCount = 133

Luego en el punto de inyección me salió el error:

Dependencias insatisfechas para el tipo ... con calificadores @Default

La solución es actualizar el índice de anotaciones de Java. descargue la nueva versión de jandex (jandex-1.2.3.Final o más reciente) luego póngala en

JBOSS_HOME / modules / system / layers / base / org / jboss / jandex / main y luego actualice la referencia al nuevo archivo en module.xml

NOTA: EAP 6.4.x ya tiene esto arreglado