CommandMapArgumentResolver 사용에 대해서요
- 작성자 :
- 김*기
- 작성일 :
- 2013-04-29 15:53:26
- 조회수 :
- 1,436
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
지금 프레임워크버젼 2.5 사용중인데요~
스프링버젼을 3.0.5버젼에서 3.1.2버젼으로 버젼업을 했는데요~
버젼업하고 나서 commandMap이 파라미터값를 받아오질 못하네요~
받아오는값을 보면 ModelMap과 동일한 값을 받아옵니다
검색을 해서 찾아보고 CommandMapArgumentResolver 는 아래와 같이 바꾸고
public class CommandMapArgumentResolver implements
HandlerMethodArgumentResolver
{
public boolean supportsParameter(MethodParameter parameter)
{
// TODO Auto-generated method stub
return true;
}
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception
{
Class<?> clazz = parameter.getParameterType();
String paramName = parameter.getParameterName();
if(clazz.equals(Map.class) && paramName.equals("commandMap")){
Map<String, Object> commandMap = new HashMap<String, Object>();
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
Enumeration<?> enumeration = request.getParameterNames();
while(enumeration.hasMoreElements()){
String key = (String) enumeration.nextElement();
String[] values = request.getParameterValues(key);
if(values!=null){
commandMap.put(key, (values.length > 1) ? values:values[0] );
}
}
return commandMap;
}
return new Object();
}
}
egov-com-servlet.xml 설정은
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="egovframework.com.cmm.CommandMapArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
이런식으로 변경했는데요 그래도 값이 넘어오질 못하네요
어떻게 변경해야 하는지 답변 부탁드립니다.
스프링버젼을 3.0.5버젼에서 3.1.2버젼으로 버젼업을 했는데요~
버젼업하고 나서 commandMap이 파라미터값를 받아오질 못하네요~
받아오는값을 보면 ModelMap과 동일한 값을 받아옵니다
검색을 해서 찾아보고 CommandMapArgumentResolver 는 아래와 같이 바꾸고
public class CommandMapArgumentResolver implements
HandlerMethodArgumentResolver
{
public boolean supportsParameter(MethodParameter parameter)
{
// TODO Auto-generated method stub
return true;
}
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception
{
Class<?> clazz = parameter.getParameterType();
String paramName = parameter.getParameterName();
if(clazz.equals(Map.class) && paramName.equals("commandMap")){
Map<String, Object> commandMap = new HashMap<String, Object>();
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
Enumeration<?> enumeration = request.getParameterNames();
while(enumeration.hasMoreElements()){
String key = (String) enumeration.nextElement();
String[] values = request.getParameterValues(key);
if(values!=null){
commandMap.put(key, (values.length > 1) ? values:values[0] );
}
}
return commandMap;
}
return new Object();
}
}
egov-com-servlet.xml 설정은
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="egovframework.com.cmm.CommandMapArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
이런식으로 변경했는데요 그래도 값이 넘어오질 못하네요
어떻게 변경해야 하는지 답변 부탁드립니다.
A
안녕하세요. 김재기님.
Spring 3.1부터 기존 WebArgumentResolver가 변경하신 것 처럼 HandlerMethodArgumentResolver로 변경되었습니다.
실제 API 형식만 변경되었지, 동일한 동작을 하기 때문에 작성하신 부분 상에는 문제가 없어 보입니다.
이 경우는 실제 위 resolveArgument() 메소드가 호출되는지를 확인해 보시면 되실 것 같습니다. (Controller 메소드의 특정 파라미터를 제외하고 파라미터마다 호출됨)
그럼, 즐거운 하루되십시오.
감사합니다.
Spring 3.1부터 기존 WebArgumentResolver가 변경하신 것 처럼 HandlerMethodArgumentResolver로 변경되었습니다.
실제 API 형식만 변경되었지, 동일한 동작을 하기 때문에 작성하신 부분 상에는 문제가 없어 보입니다.
이 경우는 실제 위 resolveArgument() 메소드가 호출되는지를 확인해 보시면 되실 것 같습니다. (Controller 메소드의 특정 파라미터를 제외하고 파라미터마다 호출됨)
그럼, 즐거운 하루되십시오.
감사합니다.