1. Введение
В нашей статье Введение в использование Thymeleaf в Spring мы увидели, как привязать пользовательский ввод к объектам.
Мы использовали th:object
и th:field
в шаблоне Thymeleaf и @ModelAttribute
в контроллере для привязки данных к объекту Java. В этой статье мы рассмотрим, как использовать аннотацию Spring @RequestParam
в сочетании с Thymeleaf.
2. Параметры в формах
Давайте сначала создадим простой контроллер, который принимает четыре необязательных параметра запроса:
@Controller
public class MainController {
@RequestMapping("/")
public String index(
@RequestParam(value = "participant", required = false) String participant,
@RequestParam(value = "country", required = false) String country,
@RequestParam(value = "action", required = false) String action,
@RequestParam(value = "id", required = false) Integer id,
Model model
) {
model.addAttribute("id", id);
List<Integer> userIds = asList(1,2,3,4);
model.addAttribute("userIds", userIds);
return "index";
}
}
Имя нашего шаблона Thymeleaf — index.html
. В следующих трех разделах мы будем использовать различные элементы формы HTML, чтобы пользователь мог передавать данные контроллеру.
2.1. Входной элемент
Во-первых, давайте создадим простую форму с полем ввода текста и кнопкой для отправки формы:
<form th:action="@{/}">
<input type="text" th:name="participant"/>
<input type="submit"/>
</form>
Атрибут th:name="participant"
привязывает значение поля ввода к параметру участника
контроллера. Чтобы это работало, нам нужно аннотировать параметр @RequestParam(value = «participant»)
.
2.2. Выберите элемент
Аналогично для элемента выбора HTML:
<form th:action="@{/}">
<input type="text" th:name="participant"/>
<select th:name="country">
<option value="de">Germany</option>
<option value="nl">Netherlands</option>
<option value="pl">Poland</option>
<option value="lv">Latvia</option>
</select>
</form>
Значение выбранной опции привязано к параметру country
, аннотированному @RequestParam(value = «country»)
.
2.3. Элемент кнопки
Другой элемент, где мы можем использовать th:name
, — это кнопка:
<form th:action="@{/}">
<button type="submit" th:name="action" th:value="in">check-in</button>
<button type="submit" th:name="action" th:value="out">check-out</button>
</form>
В зависимости от того, была ли нажата первая или вторая кнопка для отправки формы, значение параметра action
будет либо check-in
, либо check-out
.
3. Параметры в гиперссылках
Другой способ передать параметры запроса контроллеру — через гиперссылку:
<a th:href="@{/index}">
И мы можем добавить параметры в скобках:
<a th:href="@{/index(param1='value1',param2='value2')}">
Thymeleaf оценивает вышеизложенное как:
<a href="/index?param1=value1¶m2=value2">
Использование выражений Thymeleaf для создания гиперссылок особенно полезно, если мы хотим присвоить значения параметров на основе переменных. Например, давайте создадим гиперссылку для каждого идентификатора пользователя:
<th:block th:each="userId: ${userIds}">
<a th:href="@{/(id=${userId})}"> User [[${userId}]]</a> <br/>
</th:block>
Мы можем передать список идентификаторов пользователей как свойство шаблона:
List<Integer> userIds = asList(1,2,3);
model.addAttribute("userIds", userIds);
И результирующий HTML будет:
<a th:href="/?id=1"> User 1</a> <br/>
<a th:href="/?id=2"> User 2</a> <br/>
<a th:href="/?id=3"> User 3</a> <br/>
Идентификатор
параметра в гиперссылке привязан к идентификатору
параметра , аннотированному с помощью @RequestParam(value = «id»)
.
4. Резюме
В этой короткой статье мы увидели, как использовать параметры запроса Spring в сочетании с Thymeleaf.
Сначала мы создали простой контроллер, который принимает параметры запроса. Во-вторых, мы рассмотрели, как использовать Thymeleaf для создания HTML-страницы, которая может вызывать наш контроллер.
Полный исходный код всех примеров в этой статье можно найти на GitHub.