복붙노트

[SPRING] 봄 MVC 양식 : 선택 태그, 여러 선택 올바르게 바인딩하지?

SPRING

봄 MVC 양식 : 선택 태그, 여러 선택 올바르게 바인딩하지?

기존 데이터베이스 행을 편집하기위한 양식을 작성하려고합니다. Spring MVC form 태그를 사용하여 html을 form backing 객체에 자동 바인딩합니다. 행은 다른 테이블과의 관계가 많으면 많습니다.이 테이블은 select 태그를 사용하여 다중 선택 상자로 나타냅니다.

<form:select path="rules">
    <form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/>
</form:select>

관계가 Hibernate를 Bundle pojo 내부의 HashSet으로 표현할 수 있도록 영속성을 위해 Hibernate를 사용하고 있습니다.

 private Set<Rule> rules = new HashSet<Rule>(0);

페이지의 선택 상자가 없으면 개체가 데이터베이스로 올바르게 업데이트되지만 선택 상자를 사용하면 개체가 데이터베이스로 업데이트되지 않고 log4j 로그에이 오류가 표시됩니다.이 오류는 예외를 발생시키지 않습니다 , 로그에서만 볼 수 있습니다.

DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1

이 문제는 선택 상자 안의 항목을 선택 취소하면 전체 양식이 올바르게 제출하기를 거부합니다. 누구든지 나를 도울 수 있습니까?

나는이 질문과 유사한 Spring MVC의 양식에 컬렉션 속성을 바인딩하는 방법을 알고있다. 안타깝게도 내 문제에 도움이되는 제안은 없다.

해결법

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

    1.문제는 양식 제출 때문입니다. Spring은 명령 객체를 바인드 할 수 없기 때문에 폼을 제출하지 않고 대신 formView로 리디렉션합니다.

    문제는 양식 제출 때문입니다. Spring은 명령 객체를 바인드 할 수 없기 때문에 폼을 제출하지 않고 대신 formView로 리디렉션합니다.

    바인딩이 성공적으로 수행되면 대신이 메시지가 표시됩니다.

    No errors -> processing submit
    

    문제를 해결하려면 컨트롤러에 CustomCollectionEditor를 등록해야합니다. (이 링크 참조). 그것은 다음과 같이 될 것입니다 :

    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
    {   
      binder.registerCustomEditor(Set.class, "rules", new CustomCollectionEditor(Set.class)
      {
        protected Object convertElement(Object element)
        {
            String name = "";
    
            if (element instanceof String)
                name = (String) element;
    
            return name != null ? new Rule(name) : null;
        }
      });
    }
    
  2. from https://stackoverflow.com/questions/706660/spring-mvc-formselect-tag-multiple-selections-not-binding-correctly by cc-by-sa and MIT license