2016-09-08 267 views
-1

有2個控制器具有相同@RequestMapping值:如果兩個控制器具有相同的RequestMapping路徑值,如何指定控制器名稱?

package com.ambre.hib.controller; 
@Controller 
public class AppointmentsController { 
    @RequestMapping(value = "/new", method = RequestMethod.GET) 
    public AppointmentForm getNewForm() { 
     return new AppointmentForm(); 
    } 
} 

package com.ambre.hib.controller; 
@Controller 
public class ClientsController { 
    @RequestMapping(value = "/new", method = RequestMethod.GET) 
    public ClientForm getNewForm() { 
     return new ClientForm(); 
    } 
} 

所以2個控制器具有相同的 「/新」 動作。

在JSP頁面中我想一個鏈接定位到第二個控制器的「/新」行動

現在:<a href="<c:url value='/new' />"><img src="resources/images/plus.png" /></a>

這寫的是模棱兩可的,因爲春天不知道成控制器關注一下!那麼如何在鏈接目標中指定控制器名稱呢?

+1

不能有2控制器在同一網址。 url映射必須不同。 –

+0

聲明一個控制器並使用if條件,那將是更好的方法。 –

回答

2

使用相同的@RequestMapping不可能擁有兩個或多個控制器方法。調度員不會知道要調用的方法。

您可以設置一個基本要求映射爲每個控制器:

package com.ambre.hib.controller; 
@Controller 
@RequestMapping("/appointments") 
public class AppointmentsController { 
    @RequestMapping(value = "/new", method = RequestMethod.GET) 
    public AppointmentForm getNewForm() { 
     return new AppointmentForm(); 
    } 
} 

package com.ambre.hib.controller; 
@Controller 
@RequestMapping("/clients") 
public class ClientsController { 
    @RequestMapping(value = "/new", method = RequestMethod.GET) 
    public ClientForm getNewForm() { 
     return new ClientForm(); 
    } 
} 

如果是這樣,調用每個的方式將是<a href="<c:url value='/appointments/new' />">用於第一控制器和 <a href="<c:url value='/clients/new' />">用於第二

-2

您需要使用「params」選項縮小請求範圍。例如

@Controller 
public class HelloWorldController { 
    @RequestMapping(value="/fetch", params = {"id=100"}) 
    public String getInfo1(@RequestParam("id") String id) { 
     System.out.println("Inside getInfo1"); 
     return "success"; 
    } 
    @RequestMapping(value="/fetch", params = {"id=200"}) 
    public String getInfo2(@RequestParam("id") String id) { 
     System.out.println("Inside getInfo2"); 
     return "success"; 
    } 
} 

當您訪問URL/fetch?id = 100時,將調用方法getInfo1()。當你訪問URL/fetch?id = 200時,方法getInfo2()被調用,當你訪問/ fetch?id = 300時,接收HTTP狀態404。在這種情況下,「id」參數只是用於將請求縮小到控制器中首選方法的另一個參數。

+0

如果有幾千個可能的參數值,該怎麼辦? – pheromix

+0

你是什麼意思?你可以指定儘可能多的參數 – george

+0

這是不實際的!所以我必須實施上千種方法! – pheromix

相關問題