2015-02-05 36 views
20

我是Java EE新手。我想测试JSF,因此做了一个简单的程序,但不能部署它。我收到以下错误信息:WELD-001408:带有限定符的客户类型的不满意依赖关系@Default

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作为外部库。这里有谁可以帮助我?谢谢大家。

+0

我认为你的问题是客户不是@Named。 – 2015-02-05 19:44:32

+0

CDI是否知道'Customer'类(例如托管bean或(本地)EJB)? – Tiny 2015-02-05 19:52:03

+0

嘿所有,这真的很有帮助,谢谢!实际上,使用对“客户”类进行注释不起作用,但其中起作用。但为什么...? – mike128 2015-02-05 21:09:29

回答

38

Customer类必须由CDI发现作为一个bean。为此你有两种选择:

  1. 把一个bean defining annotation就可以了。由于@Model是一个刻板印象,这就是它为什么要这样做的原因。像@Named限定符不是定义注解的bean,为什么它不工作

  2. 从“注释”默认更改bean discovery mode in your bean archive通过在你的罐子加入beans.xml文件“全部”。

请记住,@Named只有一个用法:将您的bean暴露给UI。其他用法是针对不良做法或与传统框架的兼容性。

-4

要注入一个对象,其类必须为CDI机制所知。 Usualy添加@Named注解将做到这一点。

+4

错误,“@Named”不会让一个类成为一个bean。 – sleske 2016-11-07 11:41:09

-2

你需要注释与@Named或@Model注释您的客户类:

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

或创建/修改的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> 
+5

使用“@Named”将无济于事。 “@Named注释并不是使类成为一个bean的原因。”,[Weld docs,chapter 2.1.3。 EL名称](http://docs.jboss。组织/焊接/参考/最新/ EN-US/HTML/beanscdi.html#_el_name)。 – sleske 2016-11-07 11:40:31

0

这也是确保你有正确的进口

我有这样一个问题,我发现这个bean使用

javax.faces.view.ViewScoped; 

,而不是

javax.faces.bean.ViewScoped; 
一件好事

一个单词有时会毁掉世界......或者在这种情况下毁了我的一天。

相关问题