2015-06-18 21 views
0

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

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

我相信可能有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一些有用的文档:对象标记与范围内的其他表达式进行交互。在这种情况下,您需要直接使用$语法来引用孩子。

在接收端,您需要实现一个控制器以拥有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"; 
} 

您将看到服务器端的值。让我知道这是否回答你的问题。

+0

谢谢非常。我会尝试这个解决方案 –

+0

完美工作。谢谢 –