2017-02-01 23 views
0

Я пытаюсь связать список объектов в контроллере Spring, который аннотируется с помощью @RequestBody. Я использую Thymeleaf для механизма шаблонов. Я использую язык программирования Kotlin.Как связать список объектов в форме отправки на весну @RequestBody с Thymeleaf

Вот HTML код

<form class="attendanceBook" id="form_submit" role="form" method="post" action="/attendances"> 
       <table class="table table-striped"> 
        <th>Role Number</th> 
        <th style="width: 30%">Student Name</th> 
        <th>Present</th> 
        <div th:each="std, stat : ${studentList}" class="separator"> 
         <tr> 
          <td th:text="${std.roleNumber}"></td> 
          <td th:text="${std.studentName}"></td> 
          <td><input type="checkbox" th:name="|i[__${stat.index}__]|" id="i" /></td> 
          <td><input type="text" th:name="|t[__${stat.index}__]|" th:value="*{studentList[__${stat.index}__].studentId}"/> </td> 
         </tr> 
        </div> 
       </table> 
       <input type="submit" id="submit_btn" value="Click"/> 
      </form> 

Когда я отправить форму, которая преобразуется в формат Json с JQuery. Вот только часть JavaScript, которая преобразует данные формы в Json.

var genFormSubmitParams = function (context) { 
    var _this = $(context), 
     data = {}; 
    _this.find('[name]').each(function (index, value) { 
     var _this = $(this), 
      name = _this.attr('name'), 
      value = _this.val(); 
     data[name] = value; 
    }); 
    var params = {}; 
    params["data"] = JSON.stringify(data); 
    console.log(params["data"]); 
    return params; 
}; 

Описание: Контроллер.

@PostMapping 
fun patchAttendance(@RequestBody attendanceJson: AttendanceJsonWrapper): ResponseEntity<*> { 
{ 
    logger.info("attendanceJson list size {}", attendanceJson.attendanceJsons?.size) 
    logger.info("attendanceJson {}", attendanceJson) 

    return responseOK(attendanceJson) 
} 

Это класс данных, в котором мне нужно привязать одну строку.

data class AttendanceJson (
    var i: String = "", 
    var t: String = "" 
) 

И вот класс оболочки для фактического класса данных для списка объектов. Я написал это на Java.

public class AttendanceJsonWrapper { 
List<AttendanceJson> attendanceJsons; 

public AttendanceJsonWrapper() { 
} 

public AttendanceJsonWrapper(List<AttendanceJson> attendanceJsons) { 
    this.attendanceJsons = attendanceJsons; 
} 

public List<AttendanceJson> getAttendanceJsons() { 
    return attendanceJsons; 
} 

public void setAttendanceJsons(List<AttendanceJson> attendanceJsons) { 
    this.attendanceJsons = attendanceJsons; 
} 
} 

Когда я отправляю на JavaScript консоли показать это в журнале

{"i[0]":"on","t[0]":"90","i[1]":"on","t[1]":"106"} 

Но это не является обязательным в классе данных AttendanceJson как объект. Список attendanceJsons остается нулевым, но вызов ajax имеет успех.

Как связать этот список объектов с концом? Заранее спасибо.

ответ

0

попытка .serializeArray() из JQuery

$("form").submit(function(event) { console.log($(this).serializeArray()); event.preventDefault(); });

https://api.jquery.com/serializeArray/