Thymeleaf: передать данные в скрытое поле ввода - PullRequest
1 голос
/ 07 марта 2020

Я пытаюсь создать кнопку отправки, которая передает данные через @ModelAttribute. Однако значения полей postDTO в @PostController не изменились.

Большое спасибо и наилучшие пожелания, Майк.

Controller @ GetMapping

    @GetMapping("/post")
    public String post(Model model) {

    List<Post> posts = postRepository.findAllByOrderByPostedAtDesc();
    model.addAttribute("postDTO", new PostDTO("", ""));
    model.addAttribute("posts", posts);
    return "post";
}

html

<ul>
    <li th:each="post: ${posts}">
        <form th:if="${sessionUser!=null and sessionUser.admin == true}" th:object="${postDTO}" th:action="@{/postEdit}" method="post">
            <input type="hidden" th:field="*{id}" th:value="${post.id}">
            <button type="submit">Update post</button>
        </form>
    </li>
</ul>

Controller @ PostMapping

@PostMapping("/postEdit")
public String editPost(@ModelAttribute("postDTO") PostDTO postDTO, @ModelAttribute("sessionUser") User sessionUser) {
    if (sessionUser.getAdmin()) {
        Optional<Post> post = postRepository.findById(postDTO.getId());
        if (post.isPresent()) {
            redirectAttributes.addAttribute("postId", post.get());
            return "redirect:/postEdit/";
        }
    }
    return "redirect:/post";
}

Я уже пытался изменить мой html Форма, как предлагается в Значение скрытого поля Пустой лист тимьяна . Это работает для postDTO. Тем не менее, мой sessionUser.id также установлен на значение post.id.

<form th:if="${sessionUser!=null and sessionUser.admin == true}" th:object="${postDTO}" th:action="@{/postEdit}" method="post">
        <input type="hidden" name="id" th:value="${post.id}">
    <button type="submit">Update post</button>
</form>

1 Ответ

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

<script th:inline> - это самый простой способ настроить скрытые атрибуты через Thymeleaf.

Вот рабочий пример:


<html>
 ...
 ...
<body>
    <span hidden id="myData"></span>
    ...
    ...
    <script th:inline="javascript">

        var myData = [[${modelAttributeValue}]];

        document.getElementById("myData").textContent = myData; 

    </script>

Вот как приведенный выше пример работает:

  1. Скрытый элемент span с идентификатором ' myData ' определен над тегом script. Это создаст пустой диапазон и сохранит его готовым к использованию скриптом.

  2. Атрибут th: inline скрипта заставит Thymeleaf его интерпретировать. Thymeleaf установит значение переменной 'myData' в значение атрибута модели, предоставленное службой Java.

  3. Текстовое содержимое диапазона с идентификатором 'myData' будет установлено на значение, предоставляемое сервисом Java, через переменную.

Дополнительная информация:

https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#script -inlining- javascript и-дротик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...