отправка данных из ajax в контроллер пружины: обязательный параметр String отсутствует - PullRequest
1 голос
/ 10 апреля 2020

Я знаю, что уже есть много вопросов об этом сообщении об ошибке, но ничто не помогло мне решить мою проблему.

Я пытаюсь активировать учетную запись пользователя через таблицу, в которой сначала содержится электронная почта, и фамилия и флажок для каждой записи. Сначала вы устанавливаете флажки для тех пользователей, которых хотите разблокировать, а затем нажимаете кнопку для отправки вашего запроса. Затем контроллер просто меняет статус «активирован» для выбранного пользователя (ей) с 0 для деактивированного на 1 для активированного.

У меня есть файл контроллера HTML, JavaScript и Java. Обратите внимание, что в настоящее время я пытаюсь сделать это на локальном хосте и включил перекрестное происхождение хромов Google, запустив Chrome на cmd с chrome .exe --disable-web-security --allow-file-access-from -files

Я хочу разблокировать пользователя по его адресу электронной почты в MainController. java, который в настоящее время только выполняет sysout, потому что до сих пор я даже не дошел до этого метода из-за ошибки .

Я уже пытался изменить @RequestParam на @RequestBody, но он просто выдает ошибку. Обязательное тело запроса отсутствует.

Итак, я понимаю, что основная проблема заключается в том, что адрес электронной почты получение из таблицы не передается контроллеру, но как мне сделать это правильно?

как выглядит таблица: снимок экрана с таблицей

разблокировка . html

<div id="background">
  <div id="scroll-horizontal">
    <form id="table-form" method="POST" action="http://localhost:8080/mitglied/unlockUpdate">
      <table id="table">
        <tr>
          <th>E-Mail</th>
          <th>Vorname</th>
          <th>Nachname</th>
          <th><input id="unlock-all" type="checkbox"></th>
        </tr>
       </table>
       <input id="unlock-btn" type="submit" value="Freischalten"></input>
      </form>
    </div>
</div>

<script src="../static/js/unlock.js "></script>

JavaScript файл разблокировки. js

jQuery(document).ready(function() {

    $.getJSON("http://localhost:8080/mitglied/unlock", function(data) {
        var table_data = "";
        $.each(data, function(key, value) {
            table_data += "<tr>";
            table_data += "<td>" + value.email + "</td>";
            table_data += "<td>" + value.vorname + "</td>";
            table_data += "<td>" + value.nachname + "</td>";
            table_data += "<td class=" + "unlock-checkbox" + " style=" + "text-align:center" + "><input type=" + "checkbox" + "></input></td>";
            table_data += "</tr>";
        });

        $("#table").append(table_data);
    });

    jQuery('#table-form').submit(function() {
        var rows = document.getElementsByTagName("tr");

        for (var i = 1; i < rows.length; i++) {
            var cols = rows[i].getElementsByTagName("td");
            var checkbox = cols[3].getElementsByTagName("input")[0];

            if (checkbox.checked) {
                var email = cols[0].innerHTML;

                $.ajax({
                    url: $(this).attr('action'),
                    method: 'POST',
                    data: { email: email },

                    success: function(data) {
                        console.log("success, email: " + email);
                        alert("success");
                    },
                    error: function() {
                        alert("error");
                    }
                });
            }
            console.log(checkbox.checked);
        }
    });
});

и MainController. java

@Controller
@RequestMapping(path="/mitglied") public class MainController {
@Autowired
  private MitgliederRepository mitgliedRepository;

  @PostMapping(path="/unlockUpdate")
  public @ResponseBody void unlockSelectedUsers(@RequestParam String email) {
      System.out.println(email);
  }

полный сообщение об ошибке (на локальном хосте: 8080 / mitglied / unlockUpdates):

* 10 29 * Whitelabel Error Page Это приложение не имеет явного сопоставления для / error, поэтому вы видите это как запасной вариант.

Пт. 10 апреля 13:43:42 CEST 2020 Произошла непредвиденная ошибка (тип = Bad Request , статус = 400). Обязательный параметр String 'email' отсутствует

1 Ответ

0 голосов
/ 11 апреля 2020

Попробовав много вещей, это решение, на которое я попал, и работает для меня.

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

разблокировка. html

<div id="background">
        <div id="frame">
            <h1 id="table-title">Freischaltung</h1>
            <div id="scroll">
                <table id="table">
                    <thead>
                        <tr>
                            <th>E-Mail</th>
                            <th>Vorname</th>
                            <th>Nachname</th>
                            <th><input id="unlock-all" type="checkbox"></th>
                        </tr>
                    </thead>
                    <tbody></tbody>
                </table>
            </div>
            <div id="btn-container">
                <button id="unlock-btn" onclick="submit()">Freischalten</button>
            </div>
        </div>
    </div>

<script src="../static/js/unlock.js "></script>

разблокировка файла JavaScript. js

jQuery(document).ready(function() {
    updateTable();
});

function updateTable() {
        $.getJSON("http://localhost:8080/mitglied/unlock", function(data) {
        var table_data = "";
        $.each(data, function(key, value) {
            table_data += "<tr>";
            table_data += "<td>" + value.email + "</td>";
            table_data += "<td>" + value.vorname + "</td>";
            table_data += "<td>" + value.nachname + "</td>";
            table_data += "<td class=" + "unlock-checkbox" + "><input type=" + "checkbox" + "></input></td>";
            table_data += "</tr>";
        });
        $("#table").append(table_data);
    });
}

function submit() {
    var rows = document.getElementsByTagName("tr");

    //get the checked value for each table row
    for (var i = 1; i < rows.length; i++) {
        var cols = rows[i].getElementsByTagName("td");
        var checkbox = cols[3].getElementsByTagName("input")[0];

        if (checkbox.checked) {
            var email = cols[0].innerHTML;

            $.ajax({
                type: 'POST',
                url: 'http://localhost:8080/mitglied/unlockUpdate',
                data: { 'email': email },
                success: function(msg) {
                    alert("success");
                    window.location.reload();
                }
            });
        }
    }
}

и главный контроллер. java

@Controller
@RequestMapping(path="/mitglied") public class MainController {
@Autowired
  private MitgliederRepository mitgliedRepository;

  @RequestMapping(path="/unlockUpdate", method = RequestMethod.POST)
  public @ResponseBody void unlockSelectedUsers(@RequestParam (required=false) String email) {
      Iterable<Mitglied> mitglieder = mitgliedRepository.findAll();
      List<Mitglied> mitgliederListe = new ArrayList();
      mitglieder.iterator().forEachRemaining(mitgliederListe::add);

      for (Mitglied m : mitgliederListe) {
          if (m.getEmail().equals(email)) {
              m.setFreigeschaltet(true);
              mitgliedRepository.save(m);
              break;
          }
      }
      System.out.println(email);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...