2012-02-21 80 views
1

我有一個需求,我需要將Spring MVC中的命令對象從SimpleFormController傳遞給控制器​​(其實現控制器接口的控制器)。 Spring的版本是2.5,配置是基於XML的。將命令對象從SimpleFormController傳遞到控制器

從SimpleFormController重定向到控制器。然而,即使我在控制器指向的jsp中添加了session =「true」,對$ {command.myVal}的調用也會返回null。

的重定向代碼在SimpleFormController中是:

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

對於SimpleFormController的sessionForm屬性設置爲true,spring.xml

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

爲了解決這個問題,我必須明確添加在SimpleFormController命令對象到HttpSession:

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

在Simplecontroller中,我必須創建一個字符串映射到Obj並將其傳遞給View。在這裏,我再次從Session中獲取commandObj。

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

請建議是否有更好的方法,而不使用註釋。這似乎是一種長期的方式來獲得結果。

+0

請告訴我們重定向代碼。 – 2012-02-21 21:26:09

+0

命令對象是否存儲在會話中?如果沒有,它的狀態不會在重定向中生存。 – GriffeyDog 2012-02-21 21:30:05

+0

SessionForm對於SimpleFormController是真實的 true 2012-02-21 21:33:56

回答

0

爲了讓Spring解析命令對象,您需要將表單直接提交給擴展BaseCommandController的控制器。

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

如果SimpleFormController本身收到的表單提交,那麼你可以在會話存儲命令,由控制器使用。

(和ofcourse這都會變得更加容易,如果你駕馭的基於註解的方法對Spring MVC)

希望這有助於

+0

感謝amir,我找到了一種使用session的方法,但是知道這是不是Spring的方式。 – 2012-02-21 22:32:01

+0

另外,不推薦使用BaseCommandController。 – 2012-02-21 22:46:38

+0

它不比SimpleFormController更受歡迎!兩者都在v3.0中被棄用,以支持帶註釋的控制器(即在普通Java類中使用特殊註釋,而不是實現/擴展Spring的Controller接口+類層次結構)。看看它們,它們更適合用於這類東西,並且自2.5起可用。你甚至可以說SimpleFormController本身不再是'春天的方式' – laher 2012-02-22 01:32:43

相關問題