스프링 form 태그의 관련 질문입니다.

1,625 views
Skip to first unread message

안미라

unread,
Sep 27, 2010, 3:58:28 AM9/27/10
to ks...@googlegroups.com
안녕하세요. 연휴가 끝나고 다시 시작이네요.
오랫만에 질문하나 올립니다.
저는 개발하면서 스프링 form태그가 제일 어렵더라구요.
스프링 form태그 중 radiobuttons를 이용하여 상세보기 화면을 구현중에 있습니다.
키값으로 db에서 상세정보를 가지고와 상세보기 화면에 세팅을 해주는데
아래와 같이 리스트(주로 공통코드 같은것이죠)를 라디오버튼으로 표현하고 db값으로 세팅을 해주려고 하고 있습니다.
<form:radiobuttons items="${job}" itemValue="codeId" itemLabel="codeNm" path="job">
 
근데 문제는 저 path라는 것이 comand객체로 담겨진 녀석은 세팅을 잘해주는데,
db에서 가져온값으로 바인딩을 하려고 하면 어떻게 해야할지를 모르겠어요.
 
꼼수를 쓰라면
1. 리스트 화면에서 세팅해줄 값도 같이 파라미터로 넘겨주면 세팅이 되더라구요
   => 그런데 그렇게 세팅해줘야하는 항목이 여러개라면 모두 파라미터로 넘겨줄수는 없는 노릇이죠
2. 라디오 버튼으로 나열한 후 db에서 가져온값을 별도로 저장하여 자바스크립트로 세팅한다.
   => 이것도 1번과 같이 여러가지 항목인 경우는 별도 처리해주는것은 영 맘에 내키지가 않아요.
3. 스프링폼태그를 쓰지 않고 하나하나 그려준다.
   => 이건 개수가 정해져 있는 경우에는 가능하지만 공통코드가 늘어나는 경우는 소스를 수정해야하는
       문제점이 있고요.
 
결론! 스프링 태그를 쓰면서 DB에서 가져온 항목의 값으로 자동 세팅해주는 방법 아시는분요? 손!

in-seok hwang

unread,
Sep 27, 2010, 4:08:57 AM9/27/10
to ks...@googlegroups.com
이런 방법을 말씀하시는건지 잘모르겠네요..
컨트롤러에서 디비에서 읽은 값을 modelmap으로 넘겨주고
해당 jsp에서

<select id="jobCode" name="jobCode">
    <option>- 직업 -</option>
    <c:forEach var="jobList" items="${jobList}" varStatus="status">
        <option value="${jobList.jobCode}">${jobList.name}</option>
    </c:forEach>
</select>

이런식으루요...

라디오 버튼은 아니지만 forEach로 읽어가면서 처리해주시면...될거같아요.
질문이 잘 이해가안가서..ㅠㅠ

안미라

unread,
Sep 27, 2010, 4:17:02 AM9/27/10
to ks...@googlegroups.com
답변을 보니 질문은 잘 이해하신것 같아요. 감사드립니다.
알려주신 방법으로도 쓸수 있을듯 한데요.
스프링 폼태그를 사용하여 보다 간략하게 하는 방법이 없나 해서요.
select라면
<form:options items="${jobList}" ~~~~~/> 한방에 하는 방법요.
 
안되면, 알려주신 방법으로 가야하고요 ^^

2010년 9월 27일 오후 5:08, in-seok hwang <his2...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.

in-seok hwang

unread,
Sep 27, 2010, 4:23:40 AM9/27/10
to ks...@googlegroups.com
토비 스프링 보니까
맵이나 리스트로 전달해줄때
<form:select path="type">
    <form:options items="${types}" itemLabel="name" itemValue="id"/>
</form:select>
이런식으로 가능하다고 하네요.
select에 path가 들어가야하나요? 저도 안써봐서..ㅎㅎ;

Sungchul Park

unread,
Sep 27, 2010, 7:10:15 AM9/27/10
to ks...@googlegroups.com
여기에서 논의해볼만한 흥미있는 주제가 있는데요.

보통 command 객체로 domain 객체를 가져다 쓰는데요. 이렇게 하면 객체를 재
활용 할 수 있어 편하긴 하지만 domain 객체가 command 객체에 적합하지 않을
때에도 계속 쓰는 게 좋냐는 문제가 있습니다.

예를 들어 지금 같은 경우 domain 객체에 없는 어떤 값을 기준으로 radio 버
튼의 selected 속성을 표시하고 싶은 건데요. 이건 명백해 (스프링 form
taglib의 설계를 따른다면) command 객체에 있어야 하는 값입니다.

만약 특정 폼 전용의 객체를 만들고 그 속성에다 폼에서 사용할 각종 정보를
담아두면 어떨까요? 예전 struts에서 쓰던 방식처럼 web 단에서만 쓰는 모델
객체를 따로 만드는 거죠... 이렇게 하는 게 원론적인 MVC 모델에 부합한다고
봅니다.

예를 들어 다음의 domain 객체를 command 객체로 쓰는 상황인데

public class Address {
private String address1;
private String address2;
/* getter/setter 생략 */
}

db에서 읽어온 zipcode로 select 항목을 표시해서 받아야 한다고 하면 이런
식으로 별도를 객체를 만들어 command 객체로 사용해보면 어떨까요?

public class AddressCommand {
private Address address;
private String zipcode;

public Address getAddress() { return address; }
public String getZipcode() { return zipcode; }
/* setter 생략 */
}

이렇게 해도 되고요.

public class AddressCommand {
private Address address;
private String zipcode;

public String getAddress1() { return address.getAddress1(); }
public String getAddress2() { return address.getAddress2(); }
public String getZipcode() { return zipcode; }
/* setter 생략 */
}

단순한 샘플에서 domain 개체를 command 객체로 쓰는 경우가 많은데 좋은 실
천법이기는 하지만 거기에 제한될 필요는 없습니다.
command 객체는 특정 controller에서만 쓰는 경우가 많으니까 inner class로
만들어도 되겠죠.

in-seok hwang

unread,
Sep 27, 2010, 7:24:09 AM9/27/10
to ks...@googlegroups.com
아 제가 생각했던 문제네요!
그런데 domain을 그대로 command처럼 사용하는게 문제가 되지는 않지 않나요?
어짜피 domain에서 필요한것들만 외부로 뽑아서 보여주기때문에 그렇게 생각했습니다.
적합하지 않은 경우라는게 어떤 경우인지...
오히려 개발하다보니 여기저기에 클래스가 너무 많아져서
제가 속한 팀은 커맨드를 오히려 사용을 자제하고있습니다.
제가 너무 무지한가요^^;;
Reply all
Reply to author
Forward
0 new messages