当前位置: 首页 > 知识库问答 >
问题:

如何在Spring提交表格数据

丌官坚秉
2023-03-14

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

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

但是给定链接和我的实现之间的区别是链接的前端使用JSTL(JSP),而我使用Thymeleaf(超文本标记语言)

下面是正在使用的文件

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;
  }
}

控制器方法:

@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>

在进行这些更改时,页面加载时会收到以下异常。

组织。springframework。表示spel。SpelEvaluationException:EL1008E:在“java”类型的对象上找不到属性或字段“rule”。util。ArrayList’——可能不公开?

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

共有1个答案

督灿
2023-03-14

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

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

您不应该使用th:name和th:value,而应该使用th:field,这两种功能都可以。字段也应该使用*{…} 语法,自动假设th:object。

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

其他一切在我看来都是正确的。

 类似资料:
  • 问题内容: 我有一个表单,其中某处有一个提交按钮。 但是,我想以某种方式“捕获”提交事件并防止它发生。 有什么办法可以做到这一点? 我无法修改“提交”按钮,因为它是自定义控件的一部分。 问题答案: 与其他答案不同,返回仅是答案的 一部分 。考虑在return语句之前发生JS错误的情况… html 脚本 返回此处将不会执行,并且表单将以任何一种方式提交。您还应该致电以阻止Ajax表单提交的默认表单操

  • 问题内容: 我正在JSP中创建一个页面,其中有一个下拉列表,一旦用户选择了一个值,他就必须单击go按钮,然后将该值发送到Servlet。 我该如何做才能在变更时做到呢?例如,当用户选择John时,将从数据库中检索出他的所有详细信息并显示出来。我希望系统无需单击“执行”按钮即可执行此操作。 问题答案: 只需询问JavaScript的帮助。

  • 问题内容: 我们从服务器获取数据,如果要使用Struts,则可以通过提交 MVC体系结构 的页面或我们进行 AJAX调用 的页面来获取,但是约定是使用表单和呈现响应,但是我们也面临着挑战,以提供丰富的用户体验,所以我们折衷了惯例并开始使用过多的AJAX,那么如何在两者之间取得平衡? 问题答案: 我个人认为AJAX应该用于显示更新,而表单提交应该通过重新加载页面来完成。推理? 提交表单时,您是在告诉

  • 问题内容: 有没有一种方法可以使用javascript和JQuery添加一些其他字段,这些字段将使用POST从HTTP表单发送? 我的意思是: 问题答案: 是的。您可以尝试使用一些隐藏的参数。

  • 在我的应用程序中,我使用eloqua OAuth 2.0方法进行身份验证。我能够建立连接,并成功获得以下格式的access_token和refresh_token: {“访问令牌”:“2YotnFZFEjr1zCsicMWpAA”,“令牌类型”:“承载”、“到期日”:3600,“刷新令牌”:“tGzv3JOkF0XG5Qx2TlKWIA”} 我想了解下一步如何使用我收到的访问令牌进行Eloqua

  • 我正在构建一个移动Web应用程序,它从我构建的Symfony2应用程序中获取信息。用户必须提交一个表单才能查看信息,但是当我通过AJAX提交表单时,处理它的控制器看不到正在提交的表单。 移动应用程序是用Cordova构建的,因此表单来源于静态HTML表单。一旦通过AJAX提交,AJAX将返回所需的数据。然而,表单提交很好,这让AJAX发挥了神奇的作用,但是Symfony2没有看到表单被提交。我对