Как передать значение из PostMapping на отображение в GetMapping
Контроллер:
@GetMapping("/next")
String next(Model model) {
model.addAttribute("name", test);
return "greeting";
}
@PostMapping("/next")
String postNext(@RequestParam(name = "test", defaultValue = "test") String test) {
System.out.println(test);
return "redirect:/next";
}
Шаблон:
<form th:action="@{/next(test=${name})}" method="post">
<input type="hidden" th:value="${name}">
<button type="submit">Next</button>
</form>
Мне нужно узнать значение на странице и работать уже с ним может есть другие мысли как его получить
Ответы (1 шт):
Замечания
В шаблоне присутствует следующая строка:
<input type="hidden" th:value="${name}">
Здесь Вы добавляете скрытое поле формы, но при этом вы не указываете атрибут name, который потребуется для получения отправки значения и для обращения к нему.
В целом у Вас здесь имеется небольшая путаница с атрибутами, где-то name, где-то test...не надо так. Очень легко запутаться и потерять необходимое значение.
С Вашего позволения в своем решении я привел все параметры к следующему виду:
наименование: name
значение по умолчанию: test
Соответственно везде все параметры, атрибуты, имена переменных связанные с данным параметром будут называться "name".
В итоге нам для начала необходимо указать название параметра передаваемого в форме (name="name"):
<input name="name" type="hidden" th:value="${name}">
Также меня смутила следующая строка:
<form th:action="@{/next(test=${name})}" method="post">
В ней вы пытаетесь передать параметр запроса через адресную строку.
Что с этим не так:
- Во-первых передача данных через параметры адресной строки используется в GET, а не POST запросах
- Во-вторых данные формы должны передаваться с помощью полей, а не через адресную строку, в противном случае вы рискуете получить конфликт при передаче данных
Поэтому передачу параметра я настоятельно рекомендую убрать:
<form th:action="@{/next}" method="post">
Передача параметра
Если тебя интересует передача параметра именно с помощью редиректа, то можно воспользоваться классом RedirectAttributes и передать параметры запроса через него.
И перехватить параметры запроса в GET с помощью @RequestParam
@GetMapping("/next")
String next(
@RequestParam(name = "name", defaultValue = "test") String name,
Model model
) {
model.addAttribute("name", name);
return "greeting";
}
@PostMapping("/next")
String postNext(
@RequestParam(name = "name", defaultValue = "test") String name,
RedirectAttributes redirectAttributes
) {
System.out.println(name);
redirectAttributes.addAttribute("name", name);
return "redirect:/next";
}
Шаблон:
<form th:action="@{/next}" method="post">
<input type="hidden" name="name" th:value="${name}">
<button type="submit">Next</button>
</form>
Также советую для тестирования изменить тип поля на text:
<input type="text" name="name" th:value="${name}">