복붙노트

[SPRING] SpringMVC 사용자 정의 컬렉션 편집기가 Jsp로 데이터를 반환하지 않음

SPRING

SpringMVC 사용자 정의 컬렉션 편집기가 Jsp로 데이터를 반환하지 않음

봄에 다중 선택 목록을 바인딩하는 중입니다. 항목이 DAO에서 데이터를 가져 오지 않습니다. 데이터는 다른 선택 옵션 목록에서 추가됩니다. 사용자가 버튼을 클릭하면 데이터가 jquery를 사용하여 다중 선택 옵션 목록으로 전송됩니다.

양식이 게시 될 때 복잡한 데이터 형식 이래로 항목에 대한 데이터 바인딩이 발생하지 않으므로 CustomEditor를 등록하고 @initbinder에 연결했습니다.

편집 됨 CollectionEditor가 이제 시민들의 목록을 다시보기로 되 돌리는 코드를 업데이트했습니다. 그러나 목록에서 선택 옵션을 채우기 위해 데이터를 가져올 수 없습니다. 목록에 요소를 추가하려고하지만 JSP가 서버를 반환 할 때 여전히 null을 선택합니다.

아래는 코드입니다.

CustomCollectionEditor

@InitBinder("crime")    
    protected void initBinder(WebDataBinder binder, HttpServletRequest request, ServletRequestDataBinder victimbinder){
     victimbinder.registerCustomEditor(List.class, "victims", new CustomCollectionEditor(List.class){
         protected Object convertElement(Object element){

             Citizens victims = new Citizens();

             String ssNumber = "";

             if (element instanceof String){
                ssNumber = (String) element;

             }                      

             logger.debug("element is ;" +element);

             try {

                int socialSecurityNumber = Integer.parseInt(ssNumber);
                victims = citizenManager.getCitizen(socialSecurityNumber);

            } catch (NumberFormatException e) {                     
                logger.error(e.getMessage());
            } catch (Exception e) {
                logger.error(e.getMessage());
            }

             return victims;        
         }

    }); 

컨트롤러에서 DAO로 채워진 Jsp

여기에는 버튼을 클릭했을 때 DAO 클래스로 채워진 데이터가 포함되어 있습니다. 목록에서 데이터를 가져 와서 POJO에 바인드 된 다른 목록에 데이터를 추가합니다.

<label>Victims List</label><buttonid="addVictimBtn">/button>
<form:select path="" id="dbvictims" title="Victims Of Crime" class="victimLst">
<form:options items="${dbvictims.dbvictimList}" itemValue="socialSecurityNumber" itemLabel="name"/>
</form:select>  

POJO에 바인드 된 Jsp select 항목

<label>Victims In Crime</label><button id="removeVictimBtn">-</button> 
<form:select path="victims" id="victims" title="Victims Of Crime"  multiple="multiple" class="victimLst">
<form:options items="${victimList}" itemValue="socialSecurityNumber" itemLabel="name"/>
</form:select><form:errors path="victims" class="errors" />                            

해결법

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

    1.이 문제에 대한 솔루션은 매우 간단했습니다. 모든 작업이 이미 CustomCollectionEditor에서 수행되었습니다. 이는 위와 같이 복잡한 데이터 유형을 바인딩 할 때 중요합니다. 이 작업을 수행하는 다른 방법이있을 수 있지만 나는 이것이 매우 깨끗하고 간단한 접근 방법이라고 생각한다.

    이 문제에 대한 솔루션은 매우 간단했습니다. 모든 작업이 이미 CustomCollectionEditor에서 수행되었습니다. 이는 위와 같이 복잡한 데이터 유형을 바인딩 할 때 중요합니다. 이 작업을 수행하는 다른 방법이있을 수 있지만 나는 이것이 매우 깨끗하고 간단한 접근 방법이라고 생각한다.

    return 문은 뷰에서 요소의 item 속성에 바인딩되므로 매우 중요합니다. CustomCollectionEditor는 개체 (희생자) 목록을 반환합니다. DAO를 사용하면 데이터베이스에서 개체를 가져옵니다. 게시물은 레이블이 아닌 선택 값 만 전송하므로 목록을 재구성하고보기로 다시 전송하므로 중요합니다.

    내가 생략 한 부분은 목록 객체를 컨트롤러에서보기로 다시 전달하는 것입니다.

    제어 장치

    @RequestMapping(value="save.htm", method = RequestMethod.POST)
        public ModelAndView handleSave(@Valid @ModelAttribute Crime crime, 
        BindingResult result,
        ModelMap m,
        Model model) throws Exception {
    
    
        if(result.hasErrors()){
               model.addAttribute("victimList",crime.getVictims());
    
        return new ModelAndView("*Your View*");
    ...............
    
  2. from https://stackoverflow.com/questions/15746371/springmvc-custom-collection-editor-not-returning-data-to-jsp by cc-by-sa and MIT license