2012-02-21 5 views
1

Spring MVC에서 SimpleFormController에서 Controller (컨트롤러 인터페이스를 구현하는 컨트롤러)로 명령 객체를 전달해야하는 요구 사항이 있습니다. Spring의 버전은 2.5이고 설정은 XML 기반이다.SimpleFormController에서 Controller로 명령 객체 전달하기

SimpleFormController에서 리디렉션이 컨트롤러로 전송됩니다. 그러나 컨트롤러가 가리키는 jsp에 session = "true"를 추가 했더라도 $ {command.myVal}에 대한 호출은 null을 반환합니다.

SimpleFormController 같은의 리디렉션 코드는 다음 SimpleFormController 같은 들어

return new ModelAndView("redirect:/SimpleController.do"); 

는 sessionForm 속성은

<property name="sessionForm"><value>true</value></property> 

이 문제를 해결하기 위해 spring.xml에서 true로 설정되어, 나는 명시 적으로 추가했다 HttpSession에 대한 SimpleFormController의 명령 객체 :

HttpSession session = request.getSession(true); 
session.setAttribute("command", commandObj); 

그리고 SimpleController에서 Obj에 대한 String Map을 만들어 View에 전달해야했습니다. 여기에서도 다시 세션에서 commandObj를 가져 왔습니다.

HttpSession session = request.getSession(true); 
resultMap.put("command", session.getAttribute("command")); 

주석을 사용하지 않고 더 좋은 방법이 있는지 제안하십시오. 이것은 어떻게 든 결과를 얻는 데 오랜 시간이 걸리는 방식으로 보입니다.

+0

우리에게 리디렉션 코드를 제시해주십시오 데 도움이됩니다. –

+0

명령 개체가 세션에 저장되어 있습니까? 그렇지 않은 경우 상태가 리디렉션에서 생존하지 않습니다. – GriffeyDog

+0

SimpleFormController 에 대한 SessionForm이 true입니다. true

답변

0

Spring이 명령 객체를 구문 분석하려면 BaseCommandController를 확장하는 컨트롤러에 직접 양식을 제출해야합니다. 당신의 SimpleFormController 같은 자체가 양식 제출을받은 경우

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/servlet/mvc/BaseCommandController.html

는, 당신은 컨트롤러에서 사용하기 위해, 세션에서 명령을 저장할 수 있습니다.

(당신은 스프링 MVC에 대한 주석 기반의 접근 방식을 무력화 경우 당연히이 모든 쉬워 질 것입니다)

희망이

+0

감사합니다. amir을 사용하여 세션을 수행하는 방법을 찾았지만 이것이 스프링 방식이 아닌지 알고 있으면 좋을 것입니다. –

+0

또한 BaseCommandController는 더 이상 사용되지 않습니다. –

+0

SimpleFormController보다 더 이상 사용되지 않습니다. 둘 다 스프링 컨트롤러 인터페이스 + 클래스 계층 구조 구현/확장 대신 일반 자바 클래스의 특수 주석 사용과 같이 주석이 달린 컨트롤러를 사용하기 위해 v3.0에서 더 이상 사용되지 않습니다. 그 (것)들을 위로보십시오,이 종류의 재료를 위해 사용하는 것이 훨씬 더 좋고 2.5 이후부터 사용 가능합니다. SimpleFormController 자체가 더 이상 '봄의 길'이 아니라고 말할 수도 있습니다. – laher

관련 문제