如何在HTML5 + Thymeleaf中处理表单提交

时间:2015-06-18 02:03:21

标签: html5 forms spring-boot thymeleaf

我必须提交一个包含大约30个输入参数的表单(text,select,datepicker)。这些字段映射到两个类。如何映射每个字段以获取控制器中的值。

HTML:

<form id="searchPersonForm" action="#" th:object="${person}" method="post">
<input type="text" class="form-control" id="person_id" th:field="*{person_id}"></input>
<input type="text" class="form-control" id="child_id" th:field="*{child_id}"></input>
</form>

控制器:

    @RequestMapping(value = "/search", method = RequestMethod.POST)
    public String searchQuotation(Person person){

    // Some validation
    return "SearchPerson";
    }

Person.java:

@Entity
@Table(name = "PERSON")
public class Person implements java.io.Serializable {

    @SequenceGenerator(name = "p_id_generator", sequenceName = "PERSON_SEQ", allocationSize = 1)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "p_id_generator")
    private Long person_id;

    public Long getPerson_id() {
        return person_id;
    }

    public void setPerson_id(Long person_id) {
        this.person_id = person_id;
    }
}   

儿童:JAVA:

public class Child { 

    private Long child_id;

    public Long getChild_id() {
        return child_id;
    }

    public void setChild_id(Long child_id) {
        this.child_id = child_id;
    }
}   

这样我就可以从Person对象访问person_id。但是如何访问child_id。

我的应用程序使用HTML5 + Thymeleaf和Spring启动。

任何人都可以帮助解决这个问题。 感谢。

1 个答案:

答案 0 :(得分:1)

我相信你的问题可能有2个部分,我会尽力回答这两个问题。首先在表单本身上如何到达child_id以显示表单上另一个对象的字段。由于您的Person类没有Child关系,因此您需要拥有2个对象。因此,如果您提供表单的第一个控制器如下所示:

@RequestMapping("/")
public String home(Map<String, Object> model) {
    Person person = new Person();
    person.setPerson_id((long)3);
    Child child = new Child();
    child.setChild_id((long)4);
    model.put("person", person);
    model.put("child", child);
    return "home";
}

然后您的表单看起来像这样显示对象的每个值。

<form id="searchPersonForm" action="/search" th:object="${person}" method="post">
    <input type="text" class="form-control" id="person.person_id" th:field="*{person_id}"></input>
    <input type="text" class="form-control" id="child.child_id" th:field="${child.child_id}"></input>
    <input type="submit">Submit</input>
</form>

Thymeleaf site上有一些有用的文档解释了th:object标记如何与范围内的其他表达式进行交互。在这种情况下,您需要使用$语法直接引用子项。

在接收方,您需要实现一个控制器以拥有2个对象。您可能会注意到我已将表单更改为具有表单字段ID的对象前缀。因此,如果您的控制器方法如下所示:

@RequestMapping(value = "/search", method = RequestMethod.POST)
public String searchQuotation(Person person, Child child){

    System.out.println("person_id=" + person.getPerson_id());
    System.out.println("child_id=" + child.getChild_id());
    // Some validation
    return "SearchPerson";
}

您将在服务器端看到值。如果这回答了你的问题,请告诉我。