화면 필드와 VO클래스 매칭 / validation 사용 문의
- 작성자 :
- 송*현
- 작성일 :
- 2010-08-13 17:05:57
- 조회수 :
- 3,603
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요.
이전 validation 체크 질문 관련 답변 감사드립니다.
다른 질문 사항이 하나 있습니다.
예로 현재 구성상태를 설명 드립니다.
======a.jsp=======
<form:form commandName="f">
<form:input path="a"/>
<form:input apth="b"/>
</form:form>
===================
======F.class======
String a;
===================
=======B.class======
String b;
====================
"f" form에 필드가 a, b두개가 있지만 a는 F VO에 b는 B VO에 필요한 값입니다.
하지만 한번의 submit으로 두 필드값들이 한꺼번에 전송됨으로 따로 form을 구성하는 방법은 무리가 있을듯 합니다.
그런데 테스트 결과 F VO클래스에 모든 필드명을 다 가지고 있는 상태에서 그냥 submit을 날리면 Controller에서 알아서 매핑을 해서 각 VO클래스로 넣어주더군요.
그래서
==========F.class========
String a;
String b;
========================
이처럼 수정을 하고 컨트롤러에서
public String Ctrl(@ModelAttribute("f") F f, @ModelAttribute("b") B b)
이런식으로 가져 오면 F에도 a, b값을 넣어주고 B에도 b값을 넘겨주는 결과를 확인 했습니다.(중복된 값이 발생됨으로 이것도 좀 문제가 있는듯 한데요. 뭔가 다른 방도가 없는지요?)
그런데 Validation 처리를 할려니 문제가 발생할것 같습니다.
validation.xml 파일에 <form name="f">처럼 매칭을 시켜줘야 할텐데
Controller에서
public String Ctrl(@ModelAttribute("f") F f, BindingResult b1,
@ModelAttribute("b") B b, BindingResult b2)
이런식으로 전에 선언된 VO클래스를 자동으로 매핑시키는거 같던데 이렇게 되면 validation.xml 을 어떻게 설정해야 하는지요.
정리하자면
1. 한 화면에 하나의 form으로 구성된 데이터를 2개의 다른 VO클래스로 매핑시키기 위해서 Controller단에서의 매핑 방법
2. 위와 같은 상황에서 Commons Validator 를 사용하기 위한 매핑 방법
답변 부탁드립니다. 수고하십시오.
P.S : 쓴글이 많아지면 스크롤이 자동으로 올라가서 현재 타이핑 하고 있는 내용을 볼수가 없는 버그가 있네요. 그리고 작성란도 작아 이전에 쓴 글을 보기 좀 어려운것 같습니다.
이전 validation 체크 질문 관련 답변 감사드립니다.
다른 질문 사항이 하나 있습니다.
예로 현재 구성상태를 설명 드립니다.
======a.jsp=======
<form:form commandName="f">
<form:input path="a"/>
<form:input apth="b"/>
</form:form>
===================
======F.class======
String a;
===================
=======B.class======
String b;
====================
"f" form에 필드가 a, b두개가 있지만 a는 F VO에 b는 B VO에 필요한 값입니다.
하지만 한번의 submit으로 두 필드값들이 한꺼번에 전송됨으로 따로 form을 구성하는 방법은 무리가 있을듯 합니다.
그런데 테스트 결과 F VO클래스에 모든 필드명을 다 가지고 있는 상태에서 그냥 submit을 날리면 Controller에서 알아서 매핑을 해서 각 VO클래스로 넣어주더군요.
그래서
==========F.class========
String a;
String b;
========================
이처럼 수정을 하고 컨트롤러에서
public String Ctrl(@ModelAttribute("f") F f, @ModelAttribute("b") B b)
이런식으로 가져 오면 F에도 a, b값을 넣어주고 B에도 b값을 넘겨주는 결과를 확인 했습니다.(중복된 값이 발생됨으로 이것도 좀 문제가 있는듯 한데요. 뭔가 다른 방도가 없는지요?)
그런데 Validation 처리를 할려니 문제가 발생할것 같습니다.
validation.xml 파일에 <form name="f">처럼 매칭을 시켜줘야 할텐데
Controller에서
public String Ctrl(@ModelAttribute("f") F f, BindingResult b1,
@ModelAttribute("b") B b, BindingResult b2)
이런식으로 전에 선언된 VO클래스를 자동으로 매핑시키는거 같던데 이렇게 되면 validation.xml 을 어떻게 설정해야 하는지요.
정리하자면
1. 한 화면에 하나의 form으로 구성된 데이터를 2개의 다른 VO클래스로 매핑시키기 위해서 Controller단에서의 매핑 방법
2. 위와 같은 상황에서 Commons Validator 를 사용하기 위한 매핑 방법
답변 부탁드립니다. 수고하십시오.
P.S : 쓴글이 많아지면 스크롤이 자동으로 올라가서 현재 타이핑 하고 있는 내용을 볼수가 없는 버그가 있네요. 그리고 작성란도 작아 이전에 쓴 글을 보기 좀 어려운것 같습니다.
A
안녕하세요.. 송두현님..
우선 첫번째의 경우는 처리 하는 방법과 같이 하시면 됩니다.
두개의 Command/form 객체(VO)를 파라미터로 넣으시면 웹 request 정보를 해당 VO에 넣도록 되어 있습니다. 하나 이상의 경우 값이 지정되도록 되어 있습니다.
(중복적으로 들어가는 것은 어쩔 수 없을 것 같습니다. 예를 들면 2개의 VO에 동일한 property가 있는 경우 어느 부분에 값을 매핑해야하는지 판단할 수 없기 때문입니다.)
두번째의 경우는 방법이 commons validator 처리 상 어려울 것 같습니다.
다만, 서버 사이드만 적용하고 자체적인 메시지처리 방식은 가능할 것 같습니다.
적용 방법은 beanValidator의 validate 메소드를 각각 호출하시면 결과를 직접 참조하여 오류에 대한 내용을 모델에 담아 처리하실 수 있을 것 같습니다.
(form:error tag는 사용 불가)
참고로 request 부분에 대해서는 하나의 VO를 적용하시고..
controller 부분에서 의미적으로 2개의 VO로 분리하여 서비스 레이어를 호출하시는 방법이 맞을 것 같습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.
우선 첫번째의 경우는 처리 하는 방법과 같이 하시면 됩니다.
두개의 Command/form 객체(VO)를 파라미터로 넣으시면 웹 request 정보를 해당 VO에 넣도록 되어 있습니다. 하나 이상의 경우 값이 지정되도록 되어 있습니다.
(중복적으로 들어가는 것은 어쩔 수 없을 것 같습니다. 예를 들면 2개의 VO에 동일한 property가 있는 경우 어느 부분에 값을 매핑해야하는지 판단할 수 없기 때문입니다.)
두번째의 경우는 방법이 commons validator 처리 상 어려울 것 같습니다.
다만, 서버 사이드만 적용하고 자체적인 메시지처리 방식은 가능할 것 같습니다.
적용 방법은 beanValidator의 validate 메소드를 각각 호출하시면 결과를 직접 참조하여 오류에 대한 내용을 모델에 담아 처리하실 수 있을 것 같습니다.
(form:error tag는 사용 불가)
참고로 request 부분에 대해서는 하나의 VO를 적용하시고..
controller 부분에서 의미적으로 2개의 VO로 분리하여 서비스 레이어를 호출하시는 방법이 맞을 것 같습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.