ArrayList<MemberClass> 같이 객체의 집합을 어떻게 웹 parameter로 받느냐는
질문이라면 View에서 MemberClass의 값을 한 문자열로 직렬화해서 Controller
에 보내고 Controller에서는 커스텀 PropertyEditor를 만들어 이 문자열을
MemberClass로 역직렬화 하시면 됩니다.
설명하기 전에 한가지 말씀드리면 모델 객체를 컨트롤러의 커맨드 객체로 쓰
는 건 좋지만 이 둘이 항상 일치하지는 않습니다. 모델 객체를 컨트롤러의 커
맨드 객체로 쓰기 적당하지 않은데 억지로 쓰려면 필요 이상으로 복잡해질 수
도 있습니다.
객체의 집합을 웹 매개변수와 바인딩하는 방법을 설명해보겠습니다.
예를 들어 MemberClass가 다음과 같다면
class MemberClass {
private int id;
public int getId() { return id; }
public void setId(int id) {
this.id = id;}
private String firstName;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName
= firstName; }
private String lastName;
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName =
lastName; }
public String toString() {
return "MemberClass [id=" + id + ", firstName=" + firstName
+ ", lastName=" + lastName + "]";
}
}
그리고 각 객체 상태를 쉼표로 구분해서 직렬화 한다면
id,firatName,lastName
이런 PropertyEditor를 만들 수 있습니다.
class MemberClassEditor extends PropertyEditorSupport {
public void setAsText(String textValue) throws
IllegalArgumentException {
if (textValue == null) return;
String[] values = textValue.split(",", 3);
MemberClass dto = new MemberClass();
dto.id = Integer.parseInt(values[0]);
dto.firstName = values[1];
dto.lastName = values[2];
setValue(dto);
}
}
직렬화에 JSON을 쓴다면 좀 더 일반화된 PropertyEditor를 만들 수도 있겠죠.
그리고 이것을 WebBinder에 등록하세요.
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(MemberClass.class, new
MemberClassEditor());
}
이제 웹에서 각 MemberClass에 해당하는 값을 동일한 매개변수명으로 보내면
자동으로 List<MemberClass>로 변환 됩니다.
<input type="text" name="list" value="1,a,b"/>
<input type="text" name="list" value="2,c,d"/>
<input type="text" name="list" value="3,e,f"/>
<input type="text" name="list" value="4,g,h"/>
<input type="text" name="list" value="5,i,j"/>
<input type="text" name="list" value="6,k,l"/>
<input type="text" name="list" value="7,m,n"/>
12. 5. 16. 오후 2:40, Jaehoon Lim 쓴 글:
> --
> Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이
> 전송되었습니다.
> 웹에서 이 토론을 보려면
>
https://groups.google.com/d/msg/ksug/-/hWyO9_92ZxoJ을 (를) 방문하세요.