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

Использование скрытых входных данных с помощью Spring и Thymeleaf

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

1. Введение

Thymeleaf — один из самых популярных шаблонизаторов в экосистеме Java. Это позволяет нам легко использовать данные из наших Java-приложений для создания динамических HTML-страниц.

В этом уроке мы рассмотрим несколько способов использования скрытых входных данных с помощью Spring и Thymeleaf.

2. Тимелеаф с HTML-формами

Прежде чем мы рассмотрим работу со скрытыми полями, давайте сделаем шаг назад и посмотрим, как Thymeleaf работает с HTML-формами в целом.

Наиболее распространенный вариант использования — использование HTML-формы, которая напрямую сопоставляется с DTO в нашем приложении .

Например, предположим, что мы пишем приложение для блога и имеем DTO, представляющий один пост в блоге:

class BlogDTO {
long id;
String title;
String body;
String category;
String author;
Date publishedDate;
}

Мы можем использовать HTML-форму для создания нового экземпляра этого DTO с помощью Thymeleaf и Java:

<form action="#" method="post" th:action="@{/blog}" th:object="${blog}">
<input type="text" th:field="*{title}">
<input type="text" th:field="*{category}">
<textarea th:field="*{body}"></textarea>
</form>

Обратите внимание, что поля в DTO нашего блога сопоставляются с одним входом в HTML-форме. В большинстве случаев это хорошо работает, но какие поля нельзя редактировать? Здесь могут помочь скрытые входы.

Например, у каждого поста в блоге есть уникальное поле идентификатора, которое пользователям не должно быть разрешено редактировать. Используя скрытые входные данные, мы можем передать поле ID в HTML-форму, не разрешая его отображение или редактирование .

3. Использование атрибута th:field

Самый быстрый способ присвоить значение скрытому вводу — использовать атрибут th:field :

<input type="hidden" th:field="*{blogId}" id="blogId">

Это самый простой способ, потому что нам не нужно указывать атрибут value, но он может не поддерживаться в более старых версиях Thymeleaf .

4. Использование атрибута th:attr

Следующий способ, которым мы можем использовать скрытые входные данные с Thymeleaf, — это использование встроенного атрибута th:attr :

<input type="hidden" th:value="${blog.id}" th:attr="name='blogId'"/>

В этом случае мы должны сослаться на поле id , используя объект blog .

5. Использование атрибута имени

Другой менее подробный подход заключается в использовании стандартного атрибута имени HTML:

<input type="hidden" th:value="${blog.id}" name="blogId" />

Он опирается исключительно на стандартные атрибуты HTML. В этом случае мы также должны ссылаться на поле id , используя объект blog .

6. Заключение

В этом уроке мы рассмотрели несколько способов использования скрытых входных данных с Thymeleaf. Это полезный метод для передачи полей только для чтения из наших DTO в HTML-формы.

Как всегда, все примеры кода, используемые в этом руководстве, можно найти на Github .