2015-06-21 118 views
1

我想配置我的應用程序的多個控制器和也試圖重定向從一個控制器到其他調用一個控制器的方法。Spring MVC中配置多個控制器,並從另一個控制器

錯誤:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'nc' bean method.

編輯:

第一控制器

@Controller 
@RequestMapping(value = "/nc") 
public class StockController { 
    @RequestMapping(value = "/testMap", method = RequestMethod.GET) 
    public String redirectToStockList(@RequestParam(value = "testInput") String testInput) { 
     System.out.println("In StockController..!!"); 
     return "SampleTamplate"; 
} 
} 

第二控制器

@Controller 
public class WelcomeController { 
@Autowired 
private UsersServiceImpl serviceImpl; 
private String    redirectedURL; 

private static final Logger logger = LoggerFactory 
              .getLogger(WelcomeController.class); 

@RequestMapping(value = { "/", "/login" }, method = RequestMethod.GET) 
public String login(@RequestParam(value = "username") String username) { 
    logger.debug("In login() method."); 
    System.out.println("In WelcomeController..!!"); 
    return "Login"; 
} 
} 

JSP:

第一類:

<form action="testMap" method="post"> 
    <input type="text" class="form-control" name="testInput"/> 
</form> 

第二形態:

<form action="login" method="post"> 
    <input type="text" class="form-control" name="username"/> 
</form> 

當我提交兩種形式一一,控制進入「WelcomeControl ler'每次。而對於第一種形式,它給「未找到資源」錯誤沒關係,因爲沒有存在的映射爲「/ testMap」在welcome控制器。

所以,我想要的是,打電話給我的表單提交特定的控制器,也從另一個控制器調用一個控制器的方法。

任何幫助,將不勝感激。

回答

1

我會盡量回答兩個Grails和春季的方式這個問題,因爲這是在這裏介紹的Grails的最佳時機。

在通話時,從控制器離開然後彈簧的RequestDispatcher實際上有助於捕捉通話或檢查精確視圖解析器。現在,只要你想呼叫轉移到另一個控制器在這裏消費滿提供API(http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-redirecting)Inshort你必須使用視圖名稱,比如:像

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

「前進controllerName」 Grails中有你可以在控制器尋找前進方法API爲你做事(http://grails.github.io/grails-doc/2.0.4/api/org/codehaus/groovy/grails/plugins/web/api/ControllersApi.html)。它實際上將同一會話傳遞給下一個請求的控制器。

請求您請嘗試使用它。希望這個幫助。

+0

謝謝Ashay。它的工作原理:D –

1

在下面的例子,如果有在通過調用menuMapping()駐留在MenuController類內的方法在提交一個登錄表單驗證錯誤的LoginController重定向到/菜單 URL。

(注:我已經包括使用BindingResult類和假設的形式,因爲這將是想重定向到另一個控制器的有效理由。然而,下面的解決辦法仍然工作以及沒有BindingResult和如果聲明沒有使用表單)。

@Controller 
public class LoginController { 

    MenuController menuController; 

    @RequestMapping(value = "/login") 
    public String loginMapping(BindingResult result){ 
    if(result.hasErrors) { 
     return "login"; 
    } 
    else { 
     return menuController.menuMapping(); 
    } 
} 

與另一個類,像這樣的MenuController:

@Controller 
public class MenuController { 

    @RequestMapping(value = "/menu") 
    public String menuMapping(){ 
     return "menu"; 
    } 
} 

(編輯:如果你想申請的重定向和控制方法是在同一個類中,則loginMapping return語句,簡直是return menuMapping();而不是return menuController.menuMapping();

相關問題