2015-06-18 35 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

完美工作。謝謝 –