controller에서 Map으로 파라미터를 받을때
- 작성자 :
- 최*원
- 작성일 :
- 2010-09-30 13:59:15
- 조회수 :
- 4,062
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
controller에서는 아래와 같이 하였고요..
@RequestMapping
public String addFind(
@ModelAttribute("searchVO") EgovMap searchVO,
EgovMap commandMap,
BindingResult bindingResult, Model model, SessionStatus status)
throws Exception {
// Server-Side Validation
beanValidator.validate(commandMap, bindingResult);
if (bindingResult.hasErrors()) {
model.addAttribute("commandMap", commandMap);
return "/find/findRegister";
}
service.insert(SQL_CODE+SQL_SELECT, commandMap);
status.setComplete();
return "forward:~~.do";
}
dispatcher-servlet.xml는 다음과 같이 처리하였습니다.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
</property>
<property name="customArgumentResolvers">
<list>
<bean class="egovframework.rte.ptl.mvc.bind.CommandMapArgumentResolver" />
</list>
</property>
</bean>
하지만 정작 실행하면...
java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!
이렇게 나옵니다.
무엇이 잘못이고 어떻게 해야 될까요..
jsp에서는 submit으로 post/submit 하였습니다.
@RequestMapping
public String addFind(
@ModelAttribute("searchVO") EgovMap searchVO,
EgovMap commandMap,
BindingResult bindingResult, Model model, SessionStatus status)
throws Exception {
// Server-Side Validation
beanValidator.validate(commandMap, bindingResult);
if (bindingResult.hasErrors()) {
model.addAttribute("commandMap", commandMap);
return "/find/findRegister";
}
service.insert(SQL_CODE+SQL_SELECT, commandMap);
status.setComplete();
return "forward:~~.do";
}
dispatcher-servlet.xml는 다음과 같이 처리하였습니다.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
</property>
<property name="customArgumentResolvers">
<list>
<bean class="egovframework.rte.ptl.mvc.bind.CommandMapArgumentResolver" />
</list>
</property>
</bean>
하지만 정작 실행하면...
java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!
이렇게 나옵니다.
무엇이 잘못이고 어떻게 해야 될까요..
jsp에서는 submit으로 post/submit 하였습니다.
A
안녕하세요, 최상원님
작성하신 부분을 다음과 같이 테스트해보시기 바랍니다.
우선 컨트롤러를 아래처럼 샘플메소드를 새롭게 생성하시고
@RequestMapping
public String addFindSample(
@ModelAttribute("searchVO") SampleVO sampleVO,
@ModelAttribute("sample") SampleVO sample,
BindingResult bindingResult, Model model, SessionStatus status)
throws Exception {
// Server-Side Validation
beanValidator.validate(sample, bindingResult);
if (bindingResult.hasErrors()) {
//model.addAttribute("commandMap", commandMap);
return "/find/findRegister";
}
service.insert(SQL_CODE+SQL_SELECT, commandMap);
status.setComplete();
return "forward:~~.do";
}
그리고 테스트 jsp를 생성하시고 form name="sample"로 주시고 validation쪽 sample.xml도 생성하시고 디버그를 하셔서 commandMap적용이전에 validation체크가 정상적으로 진행되는지 확인부탁드립니다
감사합니다
작성하신 부분을 다음과 같이 테스트해보시기 바랍니다.
우선 컨트롤러를 아래처럼 샘플메소드를 새롭게 생성하시고
@RequestMapping
public String addFindSample(
@ModelAttribute("searchVO") SampleVO sampleVO,
@ModelAttribute("sample") SampleVO sample,
BindingResult bindingResult, Model model, SessionStatus status)
throws Exception {
// Server-Side Validation
beanValidator.validate(sample, bindingResult);
if (bindingResult.hasErrors()) {
//model.addAttribute("commandMap", commandMap);
return "/find/findRegister";
}
service.insert(SQL_CODE+SQL_SELECT, commandMap);
status.setComplete();
return "forward:~~.do";
}
그리고 테스트 jsp를 생성하시고 form name="sample"로 주시고 validation쪽 sample.xml도 생성하시고 디버그를 하셔서 commandMap적용이전에 validation체크가 정상적으로 진행되는지 확인부탁드립니다
감사합니다