有2个控制器具有相同的@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个控制器具有相同的“/ new”动作。
现在从jsp页面我想要定位到第二个控制器的“/ new”动作的链接:<a href="<c:url value='/new' />"><img src="resources/images/plus.png" /></a>
这篇文章很模糊,因为Spring不知道要看哪个控制器!那么如何在链接目标中指定控制器名称?
答案 0 :(得分: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' />">
第二次{/ 1}}
答案 1 :(得分:-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”参数只是用于将请求缩小到控制器中首选方法的另一个参数。