스프링 MVC 양식 : 태그를 선택하고 여러 선택이 올바르게 바인딩되지 않습니까?

StackOverflow https://stackoverflow.com/questions/706660

문제

기존 데이터베이스 행을 편집하기 위해 양식을 작성하려고합니다. 스프링 MVC 양식 태그를 사용하여 HTML을 양식 백킹 객체에 자동 바인딩하고 있습니다. 행에는 다른 테이블과 많은 관계가 있는데,이 테이블은 양식을 사용하여 다중 선택 상자로 표현하려고합니다.

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

나는 지속성을 위해 최대 절전 모드를 사용하고 있으므로 관계는 번들 포조 안에 해시 세트로 표시됩니다.

 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에서 수집 속성을 양식에 바인딩하는 방법, 이 질문과 유사하지만 불행히도 제안 중 어느 것도 내 문제에 유용한 것으로 보이지 않았습니다.

도움이 되었습니까?

해결책

문제는 양식을 제출하는 것입니다. 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;
    }
  });
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top