Как передать List из одного контроллера в другой через html-кнопку?

Для передачи List из одного контроллера в другой через HTML-кнопку вы можете использовать различные подходы, включая передачу данных через параметры URL, сессию, хранилище времени выполнения или использование технологий AJAX и JavaScript. Давайте рассмотрим каждый из этих подходов подробно.

1. Передача данных через параметры URL:
a. В контроллере, где находится ваша кнопка, создайте URL-путь с параметрами:

      @GetMapping("/your-path")
      public String yourMethod(Model model) {
          List<String> yourList = // получите список данных
          String url = "/your-other-path?list=" + String.join(",", yourList);
          model.addAttribute("url", url);
          return "your-view";
      }

b. В HTML-шаблоне, где находится ваша кнопка, добавьте ссылку на созданный URL:

      <a href="${url}" class="btn btn-primary">Передать список</a>

В контроллере, где вы хотите получить список, используйте аннотацию @PathVariable для извлечения значения списка:

      @GetMapping("/your-other-path")
      public String yourOtherMethod(@RequestParam("list") List<String> yourList, Model model) {
          // обработайте список данных
          model.addAttribute("yourList", yourList);
          return "your-other-view";
      }

2. Передача данных через сессию:
a. В контроллере, где находится ваша кнопка, сохраните список в сессию:

      @GetMapping("/your-path")
      public String yourMethod(HttpSession session, Model model) {
          List<String> yourList = // получите список данных
          session.setAttribute("yourList", yourList);
          return "your-view";
      }

b. В контроллере, где вы хотите получить список, получите его из сессии:

      @GetMapping("/your-other-path")
      public String yourOtherMethod(HttpSession session, Model model) {
          List<String> yourList = (List<String>) session.getAttribute("yourList");
          // обработайте список данных
          model.addAttribute("yourList", yourList);
          return "your-other-view";
      }

3. Передача данных через хранилище времени выполнения:
a. В контроллере, где находится ваша кнопка, сохраните список в хранилище времени выполнения (например, в ServletContext):

      @GetMapping("/your-path")
      public String yourMethod(ServletContext context, Model model) {
          List<String> yourList = // получите список данных
          context.setAttribute("yourList", yourList);
          return "your-view";
      }

b. В контроллере, где вы хотите получить список, получите его из хранилища времени выполнения:

      @GetMapping("/your-other-path")
      public String yourOtherMethod(ServletContext context, Model model) {
          List<String> yourList = (List<String>) context.getAttribute("yourList");
          // обработайте список данных
          model.addAttribute("yourList", yourList);
          return "your-other-view";
      }

4. Использование AJAX и JavaScript:
a. В контроллере, где находится ваша кнопка, добавьте обработчик события на клик кнопки и отправьте список данных через AJAX-запрос:

      document.querySelector('.your-button').addEventListener('click', function () {
          var xhr = new XMLHttpRequest();
          var yourList = ['item1', 'item2']; // ваш список данных
          xhr.open('POST', '/your-other-path');
          xhr.setRequestHeader('Content-Type', 'application/json');
          xhr.send(JSON.stringify({ 'yourList': yourList }));
          xhr.onreadystatechange = function () {
              if (xhr.readyState === 4 && xhr.status === 200) {
                  // обработайте ответ от сервера
              }
          };
      });

b. В контроллере, где вы хотите получить список, получите его из тела запроса:

      @PostMapping("/your-other-path")
      public String yourOtherMethod(@RequestBody Map<String, List<String>> requestBody, Model model) {
          List<String> yourList = requestBody.get("yourList");
          // обработайте список данных
          model.addAttribute("yourList", yourList);
          return "your-other-view";
      }

Вы можете выбрать подход, который наиболее удобен и подходит для вашего приложения, и реализовать его в соответствующих контроллерах.