gpt4 book ai didi

java - Spring Thymeleaf中如何提交表数据

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:40 26 4
gpt4 key购买 nike

我正在按照给定的链接提交要保存在数据库中的表数据

http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/

但是给定链接和我的实现之间的区别是链接的前端使用 JSTL (JSP) 而我使用 Thymeleaf (HTML)

下面是正在使用的文件

HTML 表单:

<form method="POST" th:action="@{/updateAllRules}" th:field="${ruleForm}">
<table>
<thead>
<tr>
<th>S No</th>
<th>Title</th>
<th>Body</th>
</tr>
</thead>
<tbody>
<tr th:each="ruleModel,iteration : ${allRules}">
<td th:text="${ruleModel.id}"></td>
<td><input type="text" th:name="${'rule'+iteration.index+'.title'}" th:value="${ruleModel.title}"></td>
<td><input type="text" th:name="${'rule'+iteration.index+'.body'}" th:value="${ruleModel.body}"></td>
</tr>
</tbody>
</table>
<br>
<input type="submit" value="Update All">
</form>

模型类:

public class Rule  {
private Integer id;
private Date timestamp;
private String title;
private String body;
// constructor and Getter/Setters
}

表单类:

public class RuleForm { 
private List<Rule> rule;
public List<Rule> getRule() {
return rule;
}
public void setRule(List<Rule> rule) {
this.rule = rule;
}
}

Controller 方法:

@RequestMapping(value = "/updateAllRules", method = RequestMethod.POST)
public String updateAllRules(@ModelAttribute("ruleForm") RuleForm ruleForm) throws IOException
{
System.out.println(ruleForm); // this prints com.web.model.RuleForm@235f9fcb
System.out.println(ruleForm.getRule()); //this prints null
return "redirect:/admin";
}

请让我知道我缺少什么。

更新 1:

按照建议进行更改。我的新 HTML 表单如下所示

<form method="POST" th:action="@{/updateAllRules}" th:object="${ruleForm}">
<table>
<thead>
<tr>
<th>S No</th>
<th>Title</th>
<th>Body</th>
</tr>
</thead>
<tbody>
<tr th:each="rule,iteration : ${ruleForm}">
<td th:field="*{rule[__${iteration.index}__].id}"></td>
<td><input type="text" th:field="*{rule[__${iteration.index}__].title}"></td>
<td><input type="text" th:field="*{rule[__${iteration.index}__].body}"></td>
</tr>
</tbody>
</table>
<br>
<input type="submit" value="Update All">
</form>

在页面加载时收到异常后进行这些更改。

org.springframework.expression.spel.SpelEvaluationException: EL1008E: 在“java.util.ArrayList”类型的对象上找不到属性或字段“rule”——可能不是公开的?

请注意我在页面加载时发送模型属性“ruleForm”中的原始列表。一旦页面加载数据并且用户进行更改,我想将完整的表格发布回 Controller 。

最佳答案

表单应该有一个th:object,而不是一个th:field:

<form method="POST" th:action="@{/updateAllRules}" th:object="${ruleForm}">

不要使用 th:nameth:value,您应该使用 th:field 来为您完成这两个操作.还应使用 *{...} 语法指定字段,该语法自动假定 th:object

<input type="text" th:field="*{rule[__${iteration.index}__].title}" />

我认为其他一切都是正确的。

关于java - Spring Thymeleaf中如何提交表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47839700/

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