2010-08-16 5 views
1

J'ai deux contrôleurs, un contrôleur de formulaire simple et un contrôleur de multiaction.Spring: objet de commande non rempli

Maintenant, dans simpleformcontroller, je veux rediriger une requête vers le contrôleur de multiaction.

est ici extrait de code 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 se lie à une méthode dans le contrôleur de MultiAction.

<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> 

et le code dans MultiActionController est

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

} 


} 

La sortie est, tous les champs de MyObj sont en mutiactioncontroller alors nulls qu'ils ont des valeurs valides lorsqu'il est passé dans SimpleFormController.

Ai-je manqué quelque chose ici ou n'est-ce pas la bonne façon de passer des objets de commande?

Toute aide est appréciée.

+0

Pourquoi utilisez-vous '' SimpleFormController' et MultiActionController'? Ils sont obsolètes et difficiles à utiliser, et remplacés depuis longtemps par des contrôleurs annotés. – skaffman

+1

Ceci est un code hérité et nous devons l'utiliser. C'est l'histoire derrière elle – JWhiz

+0

[Voici un exemple] (http://www.earldouglas.com/node/16) qui pourrait vous aider à vous orienter dans la bonne direction. Il utilise des contrôleurs annotés, qui ont effectivement remplacé les anciens contrôleurs que vous essayez d'utiliser. – earldouglas

Répondre

0

Sauf si vous stockez votre MyObject dans la session, vous aurez toujours la valeur null. Cela se produit parce que les données utilisateur ne survivent pas à la redirection. Pour stocker votre objet de commande dans la session, utilisez setSessionForm dans la SimpleFormController et ensuite récupérer votre commande en utilisant

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

au lieu

+0

Merci pour votre réponse. Cela a aidé. – JWhiz

Questions connexes