2015-06-18 6 views
0

Мне нужно отправить форму с примерно 30 входными параметрами (текст, выбор, датапикер). Поля отображаются в два класса. Как сопоставить каждое поле, чтобы получить значение в контроллере.Как обрабатывать отправку формы в 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_id из объекта Person. Но как получить доступ к child_id.

Мое приложение использует HTML5 + Thymeleaf с Spring boot.

Может кто-нибудь помочь по этой проблеме. Спасибо.

ответ

1

Я считаю, что на ваш вопрос может быть 2 части, и я постараюсь ответить на оба вопроса. Сначала в самой форме, как вы можете перейти к child_id, чтобы отображать поля из другого объекта в форме. Поскольку ваш класс Person не имеет дочерних отношений, вам нужно иметь 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 объекта. Как вы можете заметить, я изменил вашу форму, чтобы иметь префикс объекта для идентификатора полей формы. Поэтому, если ваш метод контроллера выглядит так:

@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

Thankyou очень. Я попробую это решение –

+0

Работал отлично. благодаря –

Смежные вопросы