Значения флажков не привязываются к объекту при ложном значении?

Я использовал ModelAttribute для привязки объекта в веб-приложении Spring.

Как только я заметил, что в случае, если объект имеет логическое значение A, истинно, его значение не будет обновлено, если мы снимем флажок A .

Например, у меня есть объект «Урок» с атрибутом «active» = true. В режиме «Редактировать урок» я устанавливаю флажок, который привязывается к «активному». Все работает хорошо, если флажок установлен (объект привязки отражает изменения), но объект урока не изменится, если мы снимем флажок.

Дальнейшие исследования говорят мне, что это связано с тем, что значение флажка не может быть отправлено браузером (это встроенный дизайн HTML). Поэтому я должен использовать уродливый request.getParameter , чтобы проверить, установлено ли значение.

Я только что получил этот вопрос и вижу, что asp.net mvc предоставляет способ более элегантно обойти его. Я думаю, что Spring должен предоставить нечто подобное. Кто-нибудь знает, как это сделать?

Вот мой код:

Код контроллера:

    @RequestMapping(value="/test", method = RequestMethod.POST)
    public String processEditLesson(@Valid Lesson lesson, BindingResult bindingResult, Model model) {
        System.out.println("Lesson is active: " + lesson.isActive()); // still "true" even if the checkbox is unset

        // Current work-around
        String isActive = request.getParameter("active");
        if (StringUtils.isNotNullOrEmpty(isActive)) {
            lesson.setActive(true);
        } else {
            lesson.setActive(false);
        }
        ...
    }

Просмотреть код:

<@spring.message code="lesson.edit"/> <@spring.formHiddenInput "lesson.id" /> <@spring.formHiddenInput "lesson.studio.id" />
<@spring.formInput "lesson.message" /> <@spring.showErrors "
" />

14
задан Community 23 May 2017 в 12:02
поделиться