У меня есть два вида: один для записи встреч и один для отображения их в виде календаря.После того, как бронирование прошло успешно, отображается подтверждение.Затем подтверждение переходит к представлению календаря.Я хочу передать информацию о бронировании в качестве параметров в представление календаря, чтобы оно могло соответствующим образом отобразить новое бронирование в календаре, но на этом шаге выдается пустое исключение.
Я скопировал шаблон рабочей формы.Я проверил веб-запрос, все необходимые данные есть, я думаю, что он просто не является обязательным.
data class EventAppointmentSearchRequest (val startDateTime: LocalDateTime, val endDateTime: LocalDateTime, val rooms: List<Room>)
/**
* Gets called when confirming a booking to add it to the DB.
*/
@PostMapping("/roomBookingConfirmation")
fun roomBookingConfirmation(model: Model, @ModelAttribute roomBookingRequest: RoomBookingRequest): String {
makeBooking(roomBookingRequest)
val date = roomBookingRequest.datetimeFrom
val start = roomBookingRequest.datetimeFrom.minusDays(date.dayOfWeek.value.toLong())
val end = roomBookingRequest.datetimeFrom.plusDays(7 - date.dayOfWeek.value.toLong())
model.addAttribute("eventAppointmentSearchRequest", EventAppointmentSearchRequest(
startDateTime = start,
endDateTime = end,
rooms = listOf(roomRepository.findByRoomName(roomBookingRequest.roomNr))
))
return "roomBookingConfirmation"
}
/**
* Displays the appointments in the calendar view according to the request
*/
@PostMapping("/calendarView")
fun calendarView(model: Model, @ModelAttribute eventAppointmentSearchRequest: EventAppointmentSearchRequest): String {
// THIS THROWS THE EXCEPTION: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method ...requests.EventAppointmentSearchRequest.<init>, parameter startDateTime
...
}
<!-- /*@thymesVar id="eventAppointmentSearchRequest" type="de.tudarmstadt.pvw.tulpe.soonToBeArtifactory.requests.EventAppointmentSearchRequest"*/ -->
<form th:action="@{/calendarView}" method="post" th:object="${eventAppointmentSearchRequest}" id="forwardToCalendar" style="grid-column: span 4">
<H1 th:text="#{roomBooking.bookingConfirmed}">
Booking confirmed.
</H1>
<div class="links">
<a href="#" th:text="#{roomBooking.nowRedirecting}" onclick="forwardToCalendar()">Redirecting to
calendarView in </a> <b id="secondsLeft">7</b>
<input type="hidden" th:field="${eventAppointmentSearchRequest.startDateTime}" th:name="startDateTime" th:value="${eventAppointmentSearchRequest.startDateTime}">
<input type="hidden" th:field="${eventAppointmentSearchRequest.endDateTime}" th:name="endDateTime" th:value="${eventAppointmentSearchRequest.endDateTime}">
<input type="hidden" th:field="${eventAppointmentSearchRequest.rooms}" name="rooms[]" th:each="room: ${eventAppointmentSearchRequest.rooms}" th:value="${room.RoomId}">
</div>
...
</form>
Я ожидаю, что форма будет правильно привязана, яможно увидеть все необходимые данные, чтобы использовать конструктор EventAppointmentSearchRequest в веб-инспектор моего браузера.Фактический вывод - это сообщение об ошибке:
java.lang.IllegalArgumentException: параметр, заданный как ненулевой, имеет значение null: метод ... запросы.EventAppointmentSearchRequest., Параметр startDateTime