Весенняя форма с тимелином листом не имеет обязательной силы, исключение: параметр имеет значение null - PullRequest
0 голосов
/ 27 июня 2019

У меня есть два вида: один для записи встреч и один для отображения их в виде календаря.После того, как бронирование прошло успешно, отображается подтверждение.Затем подтверждение переходит к представлению календаря.Я хочу передать информацию о бронировании в качестве параметров в представление календаря, чтобы оно могло соответствующим образом отобразить новое бронирование в календаре, но на этом шаге выдается пустое исключение.

Я скопировал шаблон рабочей формы.Я проверил веб-запрос, все необходимые данные есть, я думаю, что он просто не является обязательным.

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

1 Ответ

0 голосов
/ 27 июня 2019

Что-то вроде этого должно быть достаточно для двух скрытых данных:

<input type="hidden" th:field="*{endDateTime}">

Что касается третьего, поле th: имеет приоритет над атрибутами name и value, если вы внимательно посмотрите на сгенерированный HTML, выВы увидите, что значение идентично для каждой комнаты скрытого ввода, и это toString () в списке комнат.Это явно неправильно, и вам нужно указать каждый атрибут комнаты, который вы хотите отправить, взгляните на следующую статью: https://www.baeldung.com/thymeleaf-list

Я не вижу смысла в передаче подробностей орезервируя еще 2 раза между клиентом и сервером, я просто передаю идентификатор бронирования на страницу календаря и загружаю все детали ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...