繁体   English   中英

如何在 HTML(Thymeleaf、Spring、Java)中调用方法?

[英]How to call a method in HTML(Thymeleaf, Spring, Java)?

我是 Thymeleaf 的初学者,但我想知道如何用 Thymeleaf 调用 HTML 中的方法。 我正在使用 Spring 引导和 Spring MVC。

我想创建一个名称为“编辑”的按钮,用户将编辑博客的帖子,但如果我想这样做,我必须知道 object 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 指定值。 Java 中 int 的默认值为 0,这可能就是原因。 尝试使用 1 而不是 *{id}。

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

问题

  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>

以下是我在 html 模板中使用的工作代码来调用 java class ZC1C425268E68384F1AB4507C1479

<small th:text="${T(com.sample.util.UIclass).textContent(instr)}"> </small>

下面是 java class 的方法:

package com.sample.util;
import com.sample.models.Instr;

public class UIclass {
  public static String textContent(Instr instr)
    {
        return "Hello";
         
    }
}

如果您需要在 javascript 中访问相同的内容,则以下是代码

let d = [[${T(com.sample.UIclass).textContent(instr)}]];
console.log(d);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM