member 변수에 List가 있을 때, Converter의 구현

54 views
Skip to first unread message

Jaehoon Lim

unread,
May 16, 2012, 1:40:28 AM5/16/12
to ks...@googlegroups.com
안녕하세요, 가입 후 처음으로 글을 씁니다.

이제야 스프링이 이끌어 주는 아름다운 OOP의 세계에 빠져들었네요ㅎㅎ

현재는 구체적인 구현 전에 설계를 하고 있습니다만, 

제가 생각하는 시나리오에서 PropertyEditor / Converter를 어떻게 구현해야 좋을지 모르겠습니다.

대략적인 내용은 다음과 같습니다.

1. HTML에서 form tag를 이용하여 data를 post방식으로 받아옵니다.
javascript를 사용하여 MemberClass에 해당되는 내용은 개수가 추가되거나 삭제될 수 있습니다.

2. HTML의 입력값을 이용하여 다음과 같은 model에 값을 채우고 싶습니다.
이 때, list의 size는 가변적입니다.
package ....
import ....
public class ModelClass {
    ...
    private ArrayList<MemberClass> list
    ...
}


설명이 되는지 모르겠네요..

음.. 단순히 구현만 한다면 form을 통해 전달되는 parameter 존재 유무를 check해서

@Controller에서 MemberClass를 생성하고 list에 넣어주면 되겠지만,

이런 방법은 스프링답지 않은 것 같아서 고민입니다.

좋은 방법 없을까요?
Message has been deleted

Jaehoon Lim

unread,
May 16, 2012, 1:45:24 AM5/16/12
to ks...@googlegroups.com
구현하기 굉장히 귀찮아지겠지만,

윈도우 마법사와 비슷한 방법으로(step by step으로) 

매 단계마다 object를 하나하나 만들어서 session에 저장한 후,

완성을 누르면 한꺼번에 구성해서 넣어줘야 하나.. 생각도 하고 있습니다.

이상용

unread,
May 17, 2012, 5:07:08 AM5/17/12
to ks...@googlegroups.com
도움이 될지 모르겠지만 제가 생각하기에는 json 을 활용하시는 것이 좋을 것 같습니다.

json data를 받아서 param을 받아 해당 data를 set하거나 생성자에 입력해주면

자동으로 List 로 파싱이 되게 하면 될것같은데요^^;



2012년 5월 16일 오후 2:45, Jaehoon Lim <jy2...@gmail.com>님의 말:
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
웹에서 이 토론을 보려면 https://groups.google.com/d/msg/ksug/-/dl7HOp98ixoJ을(를) 방문하세요.

이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

Sungchul Park

unread,
May 17, 2012, 6:56:56 PM5/17/12
to ks...@googlegroups.com
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을 (를) 방문하세요.
Reply all
Reply to author
Forward
0 new messages