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

如何使用thymeleaf和spring解码表单中的对象字段

冯峻
2023-03-14

我使用thymeleaf向控制器发布表单。表单的字段是名为person的对象。在controller中,我打印这个字符串,它看起来像一个包含person中所有字段的映射<现在,我只需要person的id,这样我就可以得到person对象。我试图将参数更改为Person,但它表示无法将字符串转换为Person。我知道的唯一方法就是使用正则表达式。但我觉得这有点愚蠢。有什么简单的方法可以解决吗?

这是超文本标记语言

<form action="#" class="form-horizontal center-block"
      style="width: 40%" th:action="@{/index}" th:object="${project}" method="post">

    <select th:field="*{person}">
        <option th:each="person:${persons}" th:value="${person}" th:text="${person.name}">
            Wireframe
        </option>
    </select>

</form>

起初,我有一个这样的控制器

@PostMapping("/index")
public String save(String projectName, Person person, String description, 
                   @RequestParam(name="subject")String subject, String date) {
    System.out.println(person);               
    return "redirect:/index";
}

但我有一个错误,即无法将字符串转换为person。

然后我就这样换了控制器

@PostMapping("/index")
public String save(String projectName, String person, String description, 
                   @RequestParam(name="subject")String subject, String date) {
    System.out.println(person);               
    return "redirect:/index";
}

在控制台中,我得到了这个人(id=1,name=mike,age=44,sex=女) 。如果要获取此对象,需要使用regex拆分字符串,然后获取Id。有没有方法可以轻松获取person对象?

共有1个答案

潘俊楚
2023-03-14

我解决了,像下面这样更改html:

<form action="#" class="form-horizontal center-block" method="post"
      style="width: 40%" th:action="@{/index}" th:object="${project}">
  <select th:field="*{person}">

    <option th:each="person:${persons}" th:value="${person.id}"
            th:text="${person.name}">Wireframe</option>
  </select>
</form>
 类似资料:
  • 我正在尝试为我的列表模式中的每个对象创建一个包含该对象数据的表单。 所以我的控制器中有: 在我的ThymeLeaf模板中: 控制器: ThymeLeaf模板: 这种情况不会引发任何异常,但为空

  • 我想保存对象(产品)与列表对象(属性)和有问题,因为我需要使用输入文本的对象属性。 产品实体 属性实体 我在百里香的表格。 我如何无法输入好的保存对象产品?控制器

  • 我很难将表单发回控制器,因为它应该只包含用户可以编辑的对象的arraylist。 表单加载正确,但在发布时,它似乎从未真正发布任何内容。 这是我的表格: 上面的工作正常,它正确加载列表。但是,当我发布时,它返回一个空对象(大小为0)。我认为这是由于缺少,但无论如何,这里有一个控制器POST方法: 我尝试添加一个,但不管我做什么,它都会导致异常。 我试过: 我不能访问当前客户端(编译错误),我甚至不

  • 如果我有DTO对象,添加为控制器中的属性模型。它有两个业务文件,比方说 在某些spring表单中,我只想更改第一个名称,仍然使用所有者作为DTO,而这个表单根本没有第二个名称输入。我也不想将第二个名字放在表单中作为隐藏输入,例如出于隐私原因,所以我只有一个输入处理表单中的第一个名字?是否有一种方法可以将DTO放置到具有第一个和第二个名称的模型,并且在@PostMapping控制器方法中仍然获得该方

  • 我正在尝试对List的字段求和并返回值。我想为此使用流,但我对流不熟悉,不确定流是否可以完成此操作。这是我尝试过的,但我认为语法不正确。 上下文的相关类结构。 获取总价和单价方法

  • 基本上,表单提交的表单支持对象总是空的。有人知道为什么会这样吗? 我有一个简单的控制器,显示设备列表。可以选择设备并对其应用功能。这是控制器: 设备模型对象是一个Hibernate实体: 并通过DeviceMapper映射到DeviceViewModel DeviceViewModel: 以及设备标签: 现在是DeviceCommand,它是我的表单支持对象: 最后是devices.html页面的