«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=“участник” привязывает значение поля ввода к параметр участника контроллера. Чтобы это работало, нам нужно аннотировать параметр с помощью @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>

Значение выбранного параметра привязано к параметру страны, аннотированному с помощью @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 будет либо проверка — заезд или выезд.

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.