2010-08-16 67 views
1

我有兩個控制器,一個簡單的窗體控制器和一個多動作控制器。春天:命令對象沒有得到填充

現在,在simpleformcontroller中,我想重定向請求到多動作控制器。

下面是在SimpleFormController中的代碼段

protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) { 
MyObject myOb = (MyObject)command; 
system.out.println(myOb.toString); 
ModelAndView mav = new ModelAndView(new RedirectView("another.htm")); 
mav.addObject("Obj",myOb); 
return mav; 
} 

another.htm結合在多動作控制器的方法。

<bean id="MyController" class="MyController"> 
<property name="methodNameResolver"> 
<bean class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> 
       <property name="mappings"> 
        <props> 
         <prop key="/another.htm">another</prop> 
        </props> 
     </property> 
    </bean> 
</bean> 

,並在MultiActionController的代碼是

public class MyController extends MultiActionController { 
    public ModelAndView another(HttpServletRequest request, 
      HttpServletResponse response, MyObject myObj) { 
     system.out.println(myObj.toString()); 

} 


} 

的輸出,MyObj中的各個領域都在mutiactioncontroller空,而他們在SimpleFormController中傳遞時具有有效值。

我在這裏丟失了什麼,或者這不是傳遞命令對象的正確方法嗎?

任何幫助表示讚賞。

+0

爲什麼你使用'SimpleFormController'和'MultiActionController'使用

public ModelAndView another(HttpServletRequest request, HttpServletResponse response, HttpSession session, MyObject myObj) throws CRPMException { 

檢索您的命令?它們已經過時並且很難使用,並且很久以來就被註解控制器所取代。 – skaffman 2010-08-16 09:58:20

+1

這是一個遺留代碼,我們需要使用它。那就是它背後的歷史 – JWhiz 2010-08-16 10:08:07

+0

[這裏是一個例子](http://www.earldouglas.com/node/16),可能有助於引導你走向正確的方向。它使用帶註釋的控制器,它已經有效地取代了您嘗試使用的舊式控制器。 – earldouglas 2010-08-16 16:55:32

回答

0

除非您將MyObject存儲在會話中,否則您將始終得到空值。這是因爲用戶數據無法在重定向中存活。存儲您的命令對象中的會議上,該SimpleFormController使用setSessionForm然後代替

+0

感謝您的回覆。這有幫助。 – JWhiz 2010-08-17 06:02:39