Для передачи 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"; }
Вы можете выбрать подход, который наиболее удобен и подходит для вашего приложения, и реализовать его в соответствующих контроллерах.