Spring boot сохранить назначение ученика в группу - PullRequest
0 голосов
/ 09 декабря 2018

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

<form name="myForm" method="post">
  <div class="row" id="groupList">
    <div class="col-sm">
      <div class="form-group blu-margin" th:object="${group}">
        <select class="form-control" id="dropGroup">
          <option value="0">Wybierz grupę : </option>
          <option th:each="group : ${groupList}" th:value="${group.name}" th:text="${group.name}">
          </option>
        </select>
      </div>
    </div>
    <div class="col-sm">
      <div class="form-group blu-margin" th:object="${user}">
        <select class="form-control" id="dropGroup">
          <option value="0">Wybierz studenta : </option>
          <option th:each="user : ${userListNew}" th:value="${user.firstName}" th:text="${user.firstName}+ ' ' +${user.lastName}">
          </option>
        </select>
      </div>
    </div>
    <div class="col-sm">
      <td><input name="submit" type="submit" value="submit" /></td>
    </div>
  </div>
</form>

Мой класс модели Пользователь и группа:

Группа:

@OneToMany(mappedBy = "group")
private List<User> users;

Пользователь:

@ManyToOne
private Group group;

И это мой контроллер:

@RequestMapping(value = "/showGroupList", method = RequestMethod.GET)
public String showGroupList(Model model){
    List<Group> groupList = groupRepository.findAll();
    List<User> userList = userRepository.findAll();
    Role userRole = roleRepository.findByName("ROLE_USER");
    List<User> userListNew = new ArrayList<>();

    for (User user : userList){
        if (user.getRoles().contains(userRole)){
            userListNew.add(user);
        }
    }

    model.addAttribute("groupList", groupList);
    model.addAttribute("userListNew", userListNew);
    return "groupList";
}

Теперь, когда я выбираю группу и пользователя из их списка и нажимаю "Отправить", у меня появляется следующая ошибка:

ПРЕДУПРЕЖДЕНИЕ 1132 --- [nio-8070-exec-7] .wsmsDefaultHandlerExceptionResolver: Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: метод запроса 'POST' не поддерживается]

*231024 * Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Во-первых, вам нужна форма в HTML, чтобы отправить сообщение, или вы можете отправить ее, используя jQuery или JS, но это добавит дополнительные сложности вашему коду.После добавления формы вам необходимо добавить метод для перехвата этого запроса.

HTML

<form th:action="@{/assign-group}" th:object="${newUser}" method="post">
    <select class="form-control" id="dropGroup" th:field="*{group.id}">
        <option value="0">Wybierz grupę : </option>
        <option th:each="selectedGroup : ${groupList}" th:value="${selectedGroup.id}" th:text="${group.name}">
        </option>
    </select>
    <select class="form-control" id="dropGroup" th:field="*{id}">
        <option value="0">Wybierz studenta : </option>
        <option th:each="selectedUser : ${userList}" th:value="${selectedUser.id}" th:text="${user.name}">
        </option>
    </select>
    <input name="submit" type="submit" value="submit" />
</form>

В этой форме вы будете отправлять объект User сэто установленный идентификатор, и это установленный идентификатор группы также.Еще одна вещь, вы увидите, что мы используем th:object="${newUser}", это означает, что нам нужно создать @ModelAttribute в вашем контроллере, чтобы он возвращал нового пользователя вашим формам.

CONTROLLER

@ModelAttribute(value = "newUser")
public Store newUser() {return new User();}

@RequestMapping(value = "/assign-group", method = RequestMethod.POST)
public String assignGroup(@ModelAttribute("newUser") User user) {
    // Fetch your the rest of the information using the id received.
    // Fetch the group using the group's id received.
    // Set this group to the fetched user.
}

Если вам нужно что-нибудь еще, дайте мне знать.

0 голосов
/ 09 декабря 2018

Это вопрос метода, который вы хотите использовать в своей форме.Ваша ошибка:

Request method 'POST' not supported

В ней четко сказано, что ваше приложение не знает, как обрабатывать запросы Post, и вы попросили отправить форму.В верхней части формы вы запрашиваете метод POST http:

<form name="myForm" method="post">

Однако на уровне контроллера вы указываете только метод GET http:

method = RequestMethod.GET

Это можно решить, выполнив одиниз двух вариантов: измените форму на Get или укажите в контроллере, что делать при отправке запроса POST.Глядя на ваше приложение, я думаю, что вы хотите сначала вызвать GET, чтобы получить список, и, возможно, POST, когда вы отправляете - но это вопрос дизайна, который вы предпочитаете.

Чтобы добавить контроллер POST,может быть, что-то вроде этого будет работать:

@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity <String> persistGroup(@RequestBody Group group) {
    groupRepository.save(group);
    return ResponseEntity.status(HttpStatus.CREATED).build();
}

вам нужно будет протестировать с вашей конкретной реализацией, чтобы увидеть, что форма принимает за тело (это может быть не Group) и посмотреть, к какому URI она идет ("/ "может быть неправильный URI).Идея состоит в том, чтобы сохранить группу или пользователя в соответствующие репозитории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...