跟随这个tutorial for mvc 1.0时出现此错误。
[错误]引起:org.jboss.weld.exceptions.DeploymentException:WELD-001408:类型模型的不满意依赖关系在注入点使用限定符@Default [BackedAnnotatedField] @Inject ch.xxx.controller.UserController.models at ch.xxx .controller.UserController.models(UserController.java:0)
我试过了...
这是我的User.class
@Entity
@Table(name = "users")
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String email;
private String password;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这是我的UserForm.class
import javax.ws.rs.FormParam;
public class UserForm {
@FormParam("id")
private String id;
@FormParam("email")
private String email;
@FormParam("password")
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
最后我的UserController.class,实际发生错误:
@Controller
@Stateless
@Path("/user")
public class UserController {
@PersistenceContext
EntityManager entityManager;
@Inject
Models models;
@GET
@View("user/all-users.html")
public void getAllREST(){
List<User> allUsers = entityManager.createNamedQuery("User.findAll", User.class).getResultList();
models.put("users", allUsers);
}
@GET
@Path("/create")
public String getCreateRESTForm(){
return "user/create-user.html";
}
@POST
@Path("/create")
public String create(@BeanParam UserForm userForm){
User user = new User();
user.setEmail(userForm.getEmail());
user.setPassword(user.getPassword());
entityManager.persist(user);
return "redirect:/user";
}
}
我真的迷失在这里,因为我不知道还有什么要改变的,以及这个简单形式的实际问题是什么。并且不介意纯文本密码,它仅用于测试。
我还没有使用JEE MVC,但这似乎是CDI相关的问题,不应该位于MVC框架中,因为它应该只使用CDI。
正如已经回答的那样,这个异常的原因是因为CDI容器找不到该接口的任何可注入的实现,因此无法注入它。
看一下javadoc,它说这个接口的任何实现都需要注入并请求作用域。您确定您期望的实现bean满足这些要求吗?
https://github.com/javaee/mvc-spec/blob/master/api/src/main/java/javax/mvc/Models.java
另一件事是,不要使JPA实体CDI-Beans并使它们可以注入,这是一种不好的方法,而Models接口及其实现不应该要求它。