2013-06-12 1 views
1

나는 이것에 대해 묻는 방법에 대해서는 확신하지 못한다. 그러나 나는 그것을 시도하려고 시도 할 것이다.지도지도 또는 데이터를 구성하는 다른 방법을 바인딩하는 방법

동적으로 생성 된 값 묶음으로 구성된 기존 응용 프로그램이 있습니다. 폼은 행과 열의 행렬로 나뉘며, JSP는이 정보를 사용하여 필요한 형식 인 입력을 구성합니다. 양식을 구축하기 위해 나는 그런 같은 일부 자바 클래스가 (내가 뭐하는 거지 대부분의 의사 코드를 너무 당신에 관한 아이디어를 얻을) :

class Form { 
    List<FormParts> parts; 
} 

class FormParts { 
    List<FormRow> rows; 
    List<FormHeader> headers; 
} 

class FormRow { 
    String name; 
} 

class FormHeader { 
    String name; 
} 

을 내가 루프에 의해 동적으로 JSP에서 양식을 구축하는이 클래스를 사용 FormParts을 통해 다음과 같은 형식의 테이블을 구축하기 위해 FormRows 및 FormHeaders를 사용 : 입력을 인덱스에 FormResponse 여기에 설명 된 결과 답변 목록 카운터를 사용하여 :

class FormResponse { 
    List<FormAnswer> answers; 
} 

class FormAnswer { 
    int rowNumber; 
    int headerNumber; 
    String value; 
} 

오전 데 문제가 List<FormAnswer> answers입니다. 그것은 List이기 때문에 DB에서 FormResponses를 다시로드하는 기능을 제공하려면 모든 Answers를 저장해야합니다 (nulls). 이것은 내 테이블에 엄청난 양의 쓰레기 행을 만들어 응용 프로그램을 느리게 만듭니다. 그러나 제가 약 4 개월 전에 처음 썼을 때, 저는 Spring MVC를 Maps Map에 바인딩하는 방법을 알아 내려고 노력한 것을 기억합니다. 이것은 단순히 건너 뛸 수 있기 때문에 이것을 구현하는 훨씬 좋은 방법이 될 것입니다 나는 대답 할 필요가 없다. 문제는 Spring MVC 내부적으로 List와 Maps가 LazyList와 LazyMap이된다는 것입니다.

누군가 다른 해결책이 있습니까?

답변

0

동적 양식에 대한 내 대답은 여기 Spring에서 Auto populating Set으로 확인하십시오.

키는 목록 대신 Map<Integer, YourObject>을 사용하는 것입니다. 이를 통해 색인에 차이가 생길 수 있습니다.

제네릭이 지워지기 때문에지도 맵 사용이 불가능합니다. 지도는 항상 객체의 속성이어야합니다. 그래서 당신의 예제는 괜찮을 것입니다.

LazyList/LazyMap의 개념은 오래되었습니다. Spring은 any list and map type을 조작 할 수 있습니다. Map 속성이 null 인 경우 LinkedHashMap의 인스턴스는 createdx입니다.


다른 가능성 (즉 <input type="hidden">에서 JSON으로 양식을 제출하거나 직접 AJAX를 통해) 귀하의 바인딩 및 검증을 수동으로 그냥 와이어를 통해 JSON을 전송하는 것입니다.

+0

내가 지금 당면하고있는 문제는 우리가 지금 Spring 3.06에 갇혀 있다는 것입니다. 해시 맵에 대한 답변 목록을 전환하려고 시도했지만 "org.springframework.beans.NullValueInNestedPathException"으로 채점하기 시작합니다. bean 클래스 [com.xxx.domain.FormResponse]의 잘못된 속성 'answers [0]': 확인할 수 없습니다. 디폴트 값 자동 증가 특성 유형 "을 참조하십시오. 커스텀 LazyMap을 구현하고 도움이되는지 확인하려고합니다. – CodeChimp

+0

그럴 필요는 없습니다. 이것은 새로운 특징이 아닙니다. 'WebDataBinder'의'autogrowNestedPaths' 속성을 확인하십시오. https://github.com/SpringSource/spring-framework/blob/v3.0.6.RELEASE/org.springframework.context/src/main/java/org/springframework/validation/DataBinder.java#L131 –

+0

이전 댓글을 긁어 라. . 예외는 실제로 Spring이 당신의 콜렉션을 자동 확장하려고 시도했다고 말한다. 그러나 수집 항목의 유형을 판별 할 수 없었습니다. ** 귀하의 제네릭이 정확하지 않을 수 있습니다. ** –

관련 문제