【问题标题】:How to call a method in HTML(Thymeleaf, Spring, Java)?如何在 HTML(Thymeleaf、Spring、Java)中调用方法?
【发布时间】:2020-04-16 23:13:20
【问题描述】:

我是 Thymeleaf 的初学者,但我想知道如何使用 Thymeleaf 调用 HTML 中的方法。我正在将 Spring Boot 与 Spring MVC 一起使用。

我想创建一个名称为“编辑”的按钮,用户将编辑博客的帖子,但如果我想这样做,我必须知道对象 Postagem 的 ID 是什么。

我当前的代码HTML:(blog.html)

            <div th:each="postagem : ${postagens}">
                <div class="blog-post">
                    <h2 class="blog-post-title" th:text="${postagem.titulo}"></h2>
                    <p class="blog-post-meta">25 de dezembro de 2019 publicado por <a href="#">Vitor</a></p>
                    <p th:text="${postagem.texto}"></p>
                    <form action="#" th:action="@{/blog}" th:object="${postagem}" method="post">
                      <button type="submit" class="btn btn-link" th:field="*{id}">Editar</button>
                    </form>
                </div>
                <!-- /.blog-post -->
            </div>

我目前在 Java 中的方法:(PostagemController.java)

@PostMapping("/blog")
public String edit(Postagem postagem) {
    for(Postagem post : postagens.findAll()) {
        if(post.getId() == postagem.getId()) {
            ModelAndView modelAndView = new ModelAndView("painel");
            modelAndView.addObject("postagemEdit", post);
            System.out.println("Id: " + post.getId());
            System.out.println("Título: " + post.getTitulo());
            System.out.println("Autor: " + post.getAutor());
            System.out.println("Texto: " + post.getTexto());
            break;
        }
    }
    return "redirect:/painel";
}

我在“painel.html”上的当前代码是我想要设置信息的表单

    <form method="post" th:object="${postagemEdit}" th:action="@{/painel}" style="margin: 20px 0">
        <div class="form-group">
            <input type="text" class="form-control" placeholder="Título" th:field="*{titulo}" /> <br>
            <input type="text" class="form-control" placeholder="Spoiler do artigo" th:field="*{spoiler}" /><br>
            <input type="text" class="form-control" placeholder="Autor" th:field="*{autor}" /> <br>
            <textarea id="mytextarea" th:field="*{texto}"></textarea> <br>
            <button type="submit" class="btn btn-primary">Publicar</button>
        </div>
    </form>

【问题讨论】:

  • 您可以在 html 中为帖子 ID 维护一个隐藏字段,例如 input type = hidden
  • AndrewG,那行不通。我将使用当前代码更新我的主题

标签: java thymeleaf


【解决方案1】:

您似乎没有在 html 代码中为 id 赋值。 Java 中 int 的默认值为 0,这可能就是原因。尝试使用 1 而不是 *{id}。

如果您正在从数据库中检索博客帖子 ID 和帖子内容,那么这个问题将得到解决。

【讨论】:

    【解决方案2】:

    问题

    1. 没有名字
    2. 值未设置

      • 解决方案 1
    <form action="#" th:action="@{/blog}" th:object="${postagem}" method="post">
      <input type="hidden" name="id" class="btn btn-link" th:value="*{id}" />
      <button type=submit class="btn btn-link">Editar</button>
    </form>
    
    • 解决方案 2
    <form action="#" th:action="@{/blog}" th:object="${postagem}" method="post">
    <button name="id" type=submit class="btn btn-link" th:value="*{id}">Editar</button>
    </form>
    
    • 解决方案 3
        function myFunction(id) {
          var f = document.createElement("form")
          f.style.display="none"
          f.action="/action_page.php"
          f.method="get"
          var inp = document.createElement("input");
          inp.value=id
          inp.name="id"
          f.appendChild(inp);
          document.body.appendChild(f);
          f.submit();
        }
    
        <button type=submit class="btn btn-link" th:data-id="*{id}" onclick='myFunction(this.getAttribute("data-id"))'>Editar</button>
    

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 2019-09-11
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多