Перейти к основному содержимому

Параметры запроса Spring с Thymeleaf

· 3 мин. чтения

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&param2=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.