gpt4 book ai didi

java - 为什么这个 Spring Boot/Thymeleaf 按钮隐藏了我的数据或根本不起作用?

转载 作者:行者123 更新时间:2023-12-04 09:42:54 25 4
gpt4 key购买 nike

我目前正在尝试通过遵循教程并使用它们提供的代码来进入 Spring Boot 和 Thymeleaf。我尝试实现一个额外的功能,但遇到了以下问题:代码应该显示一个由 ToDo-Object 组成的 ToDo-List,每个 ToDo-Object 都有一个名称、描述和一个指示它们是否完成的 boolean 状态。表格的每一行都应该有一个按钮可以点击,以便将待办事项标记为完成。

<table style="border-collapse:collapse; font-family: Arial,Arial,sans-serif;">
<tr>
<th padding: 5px"></th>
<th> To-Do</th>
<th> Description</th>
<th> Done?</th>
</tr>
<tr th:each="todo : ${todos}">


<td>
<!-- <form method="POST" th:action="@{/updateDone(exactToDo=${todo})}">
<button type="submit" name="submit" value="value" class="link-button">Done</button>
</form> -->

<form method="POST" th:action="@{/updateDone}">
<input type="hidden" name="exactToDo" id="exactToDo" th:value="${todo.getName()}" />
<button type="submit" name="submit" value="value" class="link-button" >This is a link that sends a POST request</button>
</form>
</td>

<td th:utext="${todo.name}" style="border: 1px solid black;">...</td>
<td th:utext="${todo.description}" style="border: 1px solid black;">...</td>
<td th:text="${todo.done} ? 'Yes! ' : 'No' " style="border: 1px solid black;">...</td>
</tr>
</table>

显示内容有效,但我的按钮在此配置中没有任何作用。我遵循了 this older question 的指示,但它不会改变我的待办事项的状态。我可以在浏览器控制台中看到它发送了一个 Post 请求,但里面似乎什么都没有。
当前注释掉的部分使数据从我的表中消失,只留下带有标题的第一行。我尝试了在网上找到的各种类似方法,但它们都得到了这两个结果之一。

这是相关 Controller 的代码:
    @RequestMapping(value = {"/updateDone"}, method=RequestMethod.POST)
public String completeTask(Model model, @RequestParam("exactToDo") String exactToDo){
for (ToDo todo : todos){
if (todo.getName().equals(exactToDo)){
todo.markDone();
}
}
return "list";
}

设置 return 为 "redirect:/list"修复了数据“消失”的问题,但 ToDo 的状态仍然没有改变。我认为问题在于 ToDo 对象没有正确发送到方法,但我不确定为什么。您可能已经注意到我试图直接发送 todo.getName() 而不是 ToDo 对象,这是因为当我尝试发送对象时,我在发布的 Controller 代码的第二行中收到错误,告诉我字符串无法转换为 ToDo 对象( Controller 当然配置为将 ToDo 对象作为参数)。这就是为什么我认为问题必须在某个地方。

如果有人能帮我解决这个问题,或者给我指出一个更好的方法,让 HTML 页面上的按钮激活我的 Java 代码中的方法,我将不胜感激。也非常感谢有关良好学习资源的提示。我正在尝试学习 Spring 和 Thymeleaf,以便为 Java 程序制作用户界面。

感谢您的时间!

最佳答案

第一件事 第一。

为什么你需要为一个按钮写这么多(表单)?现在,如果您“必须”使用表单,那么您将缺少表单标签中的 th:object="${todo}"。它将帮助 Controller 了解您将要采取某些行动的对象。

但我建议您在“td”块中使用它而不是表单。它会为你做同样的工作。一旦您的请求成功,您可以将其重定向到您的列表,您应该会立即看到新的结果得到反射(reflect)。

 <a href="/updateDone" th:href="@{/updateDone}">Mark Done</a>

您可以引用 this看一个完整的例子。在这里你会发现两件事。您可能感兴趣的用户 Controller 和任务 Controller 。

关于java - 为什么这个 Spring Boot/Thymeleaf 按钮隐藏了我的数据或根本不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62252235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com