如何使用百日咳和弹簧

时间:2017-08-13 13:05:59

标签: spring forms spring-boot thymeleaf

我使用百里香叶将表格发布到控制器。表单的字段是名为person的对象。在控制器中,我打印这个字符串,它看起来像一个包含人的所有字段的地图 现在,我只需要人的id,所以我可以得到人物对象。我尝试将参数更改为Person,但它表示无法将String转换为person。我知道的唯一方法是使用正则表达式。但我认为这有点愚蠢。有没有简单的方法来解决它?

以下是 HTML

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

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

然后我改变了控制器,就像这样

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

在控制台中,我得到了这个Person(id=1, name=mike, age=44, sex=女)。如果我想获得这个对象,我需要使用正则表达式来分割字符串,然后我将获得Id 有没有办法轻松获得人物对象?

1 个答案:

答案 0 :(得分:1)

我解决了,改变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>