복붙노트

[SPRING] 확인란 값이 false 일 때 객체에 바인딩되지 않습니까?

SPRING

확인란 값이 false 일 때 객체에 바인딩되지 않습니까?

ModelAttribute를 사용하여 Spring 웹 애플리케이션에서 객체를 바인드했다.

일단 객체에 부울 값 A가 true 인 경우 A의 체크 박스를 선택 취소하면 해당 값이 업데이트되지 않습니다.

예를 들어, "active"속성이 true 인 Lesson 객체가 있습니다. "Edit Lesson"보기에서 "active"에 바인딩하는 체크 박스를 만듭니다. 확인란이 선택되어 있으면 (바인딩 개체에 변경 내용이 반영되어 있지만) 체크 상자의 선택을 취소하면 개체 레슨이 변경되지 않습니다.

추후 연구에 따르면 checkbox 값이 브라우저에 의해 제출되지 않을 수도 있기 때문에 HTML에있는 디자인이라고 할 수 있습니다. 그래서 추한 request.getParameter를 사용하여 값이 설정되어 있는지 확인해야합니다.

난 그냥이 질문에 와서, 나는 asp.net mvc 더 우아하게 주위를 해결하는 방법을 제공 볼 수 있습니다. 나는 봄이 비슷한 것을 제공해야한다고 생각한다. 누구든지 그 일을하는 방법을 알고 있습니까?

다음은 내 코드입니다.

컨트롤러 코드 :

    @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);
        }
        ...
    }

코드보기 :

<form id="lesson" class="EditorForm" action="${rc.getContextUrl('/test.html')}" method="post" >

    <fieldset>
        <legend><@spring.message code="lesson.edit"/></legend>
        <@spring.formHiddenInput "lesson.id" />
        <@spring.formHiddenInput "lesson.studio.id" />

        <div class="Entry">
            <label for="name"><@spring.message code="lesson.message"/></label>
            <@spring.formInput "lesson.message" />
            <span class="ErrorMessage"><@spring.showErrors "<br/>" /></span>
        </div>

        <input type="checkbox" name="active" checked="checked" />
        <label for="active">${rc.getMessage('lesson.active')}</label>

        <input type="submit" value="<@spring.message code='common.update' />" />
    </fieldset>
</form>

해결법

  1. ==============================

    1.Spring에는 해결 방법이 내장되어 있습니다.

    Spring에는 해결 방법이 내장되어 있습니다.

    이 추가 숨겨진 필드를 양식에 추가하기 만하면됩니다.

    선행 밑줄이있는 매개 변수는 같은 이름의 밑줄없이 확인란 매개 변수의 존재를 나타내는 일종의 표식입니다.

    _active = on 만 제출하면 Spring은 lesson.active를 false로 설정해야합니다.

  2. ==============================

    2.Springframework 태그를 사용해야한다고 생각합니다. 왜 평범한 HTML을 사용하고 있습니까? 당신의보기가 JSP 페이지 일 경우에만 가져 오기 :

    Springframework 태그를 사용해야한다고 생각합니다. 왜 평범한 HTML을 사용하고 있습니까? 당신의보기가 JSP 페이지 일 경우에만 가져 오기 :

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    

    다음을 사용할 수 있습니다.

    <form:checkbox path="path" label="label" />
    

    문제를 처리합니다.

  3. ==============================

    3.Spring 프레임 워크 태그를 사용하면 선택한 값을 Bean 클래스에 자동으로 설정 한 다음 컨트롤러 클래스에서 값을 가져 오는 것이 매우 쉽습니다.

    Spring 프레임 워크 태그를 사용하면 선택한 값을 Bean 클래스에 자동으로 설정 한 다음 컨트롤러 클래스에서 값을 가져 오는 것이 매우 쉽습니다.

    on 경로에 bean 변수 이름을 넣어야합니다.

    이것을 사용하려면 폼에 명령 이름을 부여하고 해당 명령 이름을 사용하여 bean 객체를 해당 JSP에 바인딩해야합니다

    model.addAttribute ( "command name", bean 객체) 컨트롤러에서 this를 사용하여 객체를 바인딩합니다.

  4. from https://stackoverflow.com/questions/8723765/checkbox-values-do-not-bind-into-object-when-false by cc-by-sa and MIT license