Массив формы Thymeleaf со значениями по умолчанию - PullRequest
0 голосов
/ 02 марта 2020

Я использую Spring + Thymeleaf для просмотра и изменения пользователей в базе данных. Я хотел бы установить в полях ввода фактические значения исходного пользователя, но я пробовал с другими стилями, и это не работает.

При существующей конфигурации я могу обновлять информацию о пользователях и видеть идентификатор исходного пользователя (он не находится в поле ввода), но я не могу показать фактическую конфигурацию в поле ввода по умолчанию.

КОНТРОЛЛЕР:

@GetMapping(value = {"/", ""})
public String subusersPage(HttpSession session, Model model) {
    String idUser = BaseController.getLoggedUser(session);
    UserDTO userDTO = userService.getUserById(idUser);
    model.addAttribute("subusersDTO", userService.getSubusersDTO(userDTO.getSubusers()));
    model.addAttribute("populations", userDTO.getPopulations());
    model.addAttribute("configurations", userDTO.getConfigurations());
    model.addAttribute("attributes", userDTO.getAttributes());
    model.addAttribute("subuserDTO", new SubuserDTO());
    return "subusers";
}

HTML:

<th:block th:each="subuserDTO_original : ${subusersDTO}">
    <hr>
    <form action="#" th:action="@{/subusers/__${subuserDTO_original.id}__}" th:object="${subuserDTO}" method="post">
        <div>
            <p th:text="${'Id: ' + subuserDTO_original.id}"></p>
            <p>Name:            <input type="text" th:field="*{name}"           th:name="name"          th:value="${subuserDTO_original.name}"/></p>
            <p>Population:      <input type="text" th:field="*{population}"     th:name="population"    th:value="${subuserDTO_original.population}"/></p>
            <p>Configuration:   <input type="text" th:field="*{configuration}"  th:name="configuration" th:value="${subuserDTO_original.configuration}"/></p>
            <p>Attributes:      <input type="text" th:field="*{attributes}"     th:name="attributes"    th:value="${subuserDTO_original.attributes}"/></p>
            <p>
                <button type="submit" th:name="action" th:value="update">Update</button>
                <button type="submit" th:name="action" th:value="delete">Delete</button>
                <button type="reset" th:name="action" th:value="clear">Clear</button>
            </p>
        </div>
    </form>
    <form action="#" th:action="@{/subusers/__${subuserDTO_original.id}__}" method="get">
        <button type="submit">Default</button>
    </form>
</th:block>

Любая помощь будет очень признательна, спасибо!

1 Ответ

0 голосов
/ 04 марта 2020

Если вы хотите отредактировать существующего пользователя, тогда ваш th:object (в данном случае ${subuserDTO}) должен быть заполнен значениями исходного пользователя. Это связано с тем, что при использовании атрибута th:field="*{name}" он фактически перезаписывает name, id и value тега html (именно поэтому th:value="${subuserDTO_original.name}" не работает.

Два других варианта вы можете сделать:

  1. Вы также можете установить name="name" и использовать вместо него th:value.
  2. Или другой вариант, вы можете использовать ${subuserDTO_original} в качестве th:object.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...