2011-09-09 3 views
28

Quelle est la bonne façon de transmettre une demande au printemps à un autre contrôleur?Demande de transmission du ressort 3.0 à un autre contrôleur

@RequestMapping({"/someurl"}) 
public ModelAndView execute(Model model) { 
    if (someCondition) { 
     //forward to controller A 
    } else { 
     //forward to controller B 
    } 
} 

Tous les contrôleur ont des dépendances injectées au printemps, donc je ne peux pas les créer et les appeler moi-même, mais je veux la demande attribue à être transmis aux autres contrôleurs.

Répondre

37

Essayez à la place de renvoyer une chaîne et la chaîne étant l'URL directe.

@RequestMapping({"/someurl"}) 
public String execute(Model model) { 
    if (someCondition) { 
     return "forward:/someUrlA"; 
    } else { 
     return "forward:/someUrlB"; 
    } 
} 
+2

Voici un lien vers la documentation pour 3.0.x printemps pour RedirectView, qui couvre également: avant. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-redirecting – digitaljoel

+0

Est-il possible de le faire sans codage en dur "someUrlA"? –

6

Vous pouvez utiliser le nom de vue comme "redirect: controllerName" ou "forward: controllerName". Ce dernier redirigera la demande vers un autre contrôleur et le premier indiquera au navigateur de rediriger la demande vers une autre URL.

1

Vous pouvez utiliser Spring RedirectView pour envoyer la demande d'un contrôleur à un autre contrôleur. Il sera par défaut Type de demande « GET »

RedirectView redirectView = new RedirectView("/controllerRequestMapping/methodmapping.do", true); 
+4

La redirection n'est pas en avant. rediriger envoie les en-têtes avec la commande de redirection au client et au client. Il suffit de suivre l'emplacement, de transférer simplement la gestion des demandes de délégation à un autre gestionnaire au sein de la même requête. – msangel

Questions connexes