Как исправить неудовлетворенные зависимости для введения моделей (javax.mvc.Models)? - PullRequest
0 голосов
/ 25 марта 2019

Я получаю эту ошибку, следуя этой инструкции для mvc 1.0 .

[ОШИБКА] Причина: org.jboss.weld.exceptions.DeploymentException: WELD-001408: неудовлетворенные зависимости для моделей типов с квалификаторами @Default в точке внедрения [BackedAnnotatedField] @Inject ch.xxx.controller.UserControlmo.de ch.xxx.controller.UserController.models (UserController.java:0)

Я пытался ...

  • размещение файла beans.xml в нескольких местах (resources / META-INF / beans.xml | webapp / WEB-INF / beans.xml)
  • изменение режима bean-discovery-mode на "all"
  • аннотировал мой User.class с @Named и / или @SessionScoped (не в учебнике)

Это мой 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";
    }
}

Я действительно потерян здесь, так как понятия не имею, что еще нужно изменить и в чем проблема для такой простой формы. И не возражайте против простого текстового пароля, он только для тестирования.

1 Ответ

0 голосов
/ 30 марта 2019

Я еще не работал с JEE MVC, но, похоже, это проблема, связанная с CDI, и ее не следует размещать в инфраструктуре MVC, поскольку она должна использовать только CDI.

Причина этого исключения:Как уже было сказано, причина в том, что Контейнер CDI не находит никаких инъекционных реализаций этого интерфейса и поэтому не может внедрить его.

Взгляните на javadoc, который говорит, что любая реализация этого интерфейса должна быть инъекционнойи запрос ограничен.Вы уверены, что реализующий компонент, который вы ожидаете, удовлетворяет этим требованиям?

https://github.com/javaee/mvc-spec/blob/master/api/src/main/java/javax/mvc/Models.java

  1. Есть ли в артефакте bean.xml, в котором находится компонент?

    src / main / reosurces / META-INF / beans.xml (для JAR)

    src / main / webapp / WEB-INF / beans.xml (для WAR)

  2. Аннотирующий компонент реализуется с помощью @RequestScoped?

  3. Если ссылка указана через EL, аннотируется ли компонент с помощью @Named?

Другое дело, что не делайте сущности JPA CDI-компонентами и не делайте их инъекционными, это плохой подход, и интерфейсы Моделей и его реализации не должны этого требовать.

...