Как вывести содержимое на страницу с использованием Thymeleaf?

Как можно выводить на страницу определенные логи, отобранные с помощью фильтров и представленные в виде списка, с группировкой по пользователям для отображения их значений?
  • 4 февраля 2024 г. 13:38
Ответы на вопрос 2
Чтобы вывести содержимое на страницу с использованием Thymeleaf, вам понадобится создать веб-страницу на HTML с встроенными Thymeleaf шаблонами и привязать ее к соответствующим атрибутам модели в вашем Spring MVC контроллере. Вот базовые шаги для этой задачи:

1. Создайте HTML-страницу с расширением `.html` в каталоге `resources/templates` вашего Spring Boot проекта (или аналогичном месте для статических ресурсов).

2. В контроллере Spring MVC передайте данные, которые вы хотите отобразить, в вашу модель с помощью метода `addAttribute` класса `Model`.

Пример контроллера:
```java
@Controller
public class LoggingController {

    @RequestMapping("/logs")
    public String showLogs(Model model) {
        // Здесь предполагается, что вы уже получили и отфильтровали логи
        Map<String, List<LogEntry>> groupedLogs = fetchAndFilterLogs();
        model.addAttribute("groupedLogs", groupedLogs);
        
        return "logspage"; // Имя вашего HTML-файла Thymeleaf без расширения .html
    }

    // Ваш метод для получения логов
    private Map<String, List<LogEntry>> fetchAndFilterLogs() {
        // Ваша логика для получения и фильтрации логов
        return new HashMap<>();
    }
}
```

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

Например, `logspage.html` может выглядеть так:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <!-- Мета-данные, стили и так далее -->
    <title>Logs Page</title>
</head>
<body>

<h1>Log Entries</h1>

<div th:each="userGroup : ${groupedLogs}">
    <h2 th:text="${userGroup.key}">User Name</h2>
    <ul>
        <li th:each="log : ${userGroup.value}" th:text="${log.message}">Log message</li>
    </ul>
</div>

</body>
</html>
```

В этом шаблоне:

- `xmlns:th="http://www.thymeleaf.org"` осуществляет привязку к Thymeleaf namespace для использования Thymeleaf атрибутов.
- `th:each="userGroup : ${groupedLogs}"` проходится по всем элементам сгруппированного по пользователям словаря логов, который был передан из модели.
- `th:text="${userGroup.key}"` отображает имя пользователя.
- Внутренний `th:each` цикл проходится по всем логам относящимся к данному пользователю и выводит соответствующее сообщение лога.

Убедитесь, что класс `LogEntry`, используемый в контроллере, имеет свойство `message`, доступное через геттер, чтобы Thymeleaf мог его отобразить.
Кладёте пользователей со всеми полями в List<Person> data передаёте на представление через model.addAttribute("Person", data); и выводите с помощью Thymeleaf итератора. Например так: 
В данном примере, поля объекта Person с модификатором доступа - public.
Как перебрать List<?> средствами Thymeleaf?
Похожие вопросы