2011-09-09 90 views
28

將請求在春季轉發到不同的控制器的正確方法是什麼?Spring 3.0將請求轉發到不同的控制器

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

所有控制器都由Spring注入依賴關係,所以我不能只是創建它們,並呼籲他們自己,但我想請求屬性到其他控制器傳遞。

回答

37

嘗試返回一個字符串,而字符串是前向鏈接。

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

下面是對文檔的鏈接春3.0.x的對RedirectView的,其中還包括:前進。 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-redirecting – digitaljoel

+0

有沒有可能做到這一點,沒有硬編碼「someUrlA」? –

6

您可以使用視圖名稱,如「redirect:controllerName」或「forward:controllerName」。後者會將請求重新路由到另一個控制器,前者會告訴瀏覽器將請求重定向到另一個url。

1

您可以使用Spring RedirectView將請求從一個控制器調度到其他控制器。 這將是默認搜索類型「GET」

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

重定向不轉發。重定向將帶有重定向命令的頭部發送到客戶端,並且客戶端只需遵循位置,在相同的請求中僅將代理請求處理轉發給其他處理程序。 – msangel

相關問題