Фрагмент Thymeleaf: передача имени поля формы в качестве параметра - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь извлечь входные данные формы как фрагмент страницы в моем приложении Spring Boot + Thymeleaf.

Я делаю что-то вроде этого:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>form controls</title>
</head>
<body>
<div class="form-group" th:fragment="text-input (fieldName, fieldLabel)">
    <label th:text="${fieldLabel}">label</label>
    <input th:field="*{${fieldName}}" type="text" class="form-control"/>
    <div th:if="${#fields.hasErrors('${fieldName}')}">
        <span th:errors="*{${fieldName}}" class="text-danger"></span>
    </div>
</div>
</body>
</html>

И я ' используя фрагмент следующим образом:

<div th:replace="form-controls :: text-input (fieldName='firstName', fieldLabel='Name')">

Но я получаю эту ошибку:

org.springframework.beans.NotReadablePropertyException: Invalid property '${fieldName}' of bean class [my.app.Dto]: Bean property '${fieldName}' is not readable or has an invalid getter method

Таким образом, параметр fieldName не разрешен правильно ...

Что-то не так в моем коде? Возможно ли реализовать что-то похожее на мой фрагмент в Thymeleaf?

1 Ответ

0 голосов
/ 18 февраля 2020

Решением моей проблемы было следующее: Thymeleaf предварительная обработка выражений .

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

Итак, чтобы исправить разрешение fieldName, мне приходилось окружать каждый ${fieldName} exp двойным подчеркиванием:

<div class="form-group" th:fragment="text-input (fieldName, fieldLabel)">
    <label th:text="${fieldLabel}">label</label>
    <input th:field="*{__${fieldName}__}" type="text" class="form-control"/>
    <div th:if="${#fields.hasErrors(fieldName)}">
        <span th:errors="*{__${fieldName}__}" class="text-danger"></span>
    </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...