如果两个控制器具有相同的 RequestMapping 路径值,如何指定控制器名称?
How to specify the controller name if two controllers have same RequestMapping path value?
有 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();
}
}
因此这两个控制器具有相同的“/new”操作。
现在我想从 jsp 页面将 link 定位到第二个控制器的“/new”操作:<a href="<c:url value='/new' />"><img src="resources/images/plus.png" /></a>
此文含糊不清,因为 Spring 不知道要查看哪个控制器!那么如何在 link 目标中指定控制器名称?
您需要使用 "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" 参数只是另一个参数,您可以使用它来缩小对控制器中首选方法的请求范围。
不可能有两个或更多控制器方法具有相同的@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 个控制器具有相同的 @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();
}
}
因此这两个控制器具有相同的“/new”操作。
现在我想从 jsp 页面将 link 定位到第二个控制器的“/new”操作:<a href="<c:url value='/new' />"><img src="resources/images/plus.png" /></a>
此文含糊不清,因为 Spring 不知道要查看哪个控制器!那么如何在 link 目标中指定控制器名称?
您需要使用 "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" 参数只是另一个参数,您可以使用它来缩小对控制器中首选方法的请求范围。
不可能有两个或更多控制器方法具有相同的@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' />">
第二个