SpringRoo中action 和 方法的映射关系

来源:互联网 发布:panc.cc搜索软件 编辑:程序博客网 时间:2024/06/05 08:12

今天被老板问道为什么action这个路径就可以访问到这个list 方法上面而没有去访问别的方法;这个当时把我给问蒙了.因为我之前也思考过这个问题但是因为那会在调试中只是明白了如果你请求的路径为一个http://localhost:8080/项目名/类名加s就会访问到list这个类的list方法.对于为什么这个那会没有去深究因为要做其他调试就给忽略了,今天被问起,然后我就做了一些测试:

首先在springroo自动生成web层的每个类的controller里面都会生成很多的请求映射方法(即*.aj文件).而且在每个类(即*Controller.java)里面都会有这么一段annotation;

@RequestMapping("/类名加s")@Controller@RooWebScaffold(path = "类名加s", formBackingObject = 类名.class)

在这里其实就做了一个路径的映射.就是说你如果访问的路径是http://localhost:8080/项目名/类名加s ,他就会来在这个类中来寻找他所对应要请求的方法.而具体的要调用哪个方法就得看这个类中每个方法所映射的方式了,

首先我来解释一下为什么只要访问了类似这个路径

http://localhost:8080/项目名/类名加s

之后就会调用这个类的list方法,因为这list方法上面他是这么来进行映射的

   @RequestMapping(produces = "text/html")    public String ServiceController.list(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, Model uiModel) 

首先我们来分析一下上面的映射其实这个@RequestMapping(produces="text/html")就可以写成@RequestMapping(produces="text/html",method=RequestMethod.GET),这样就是说,只要是get请求而且没有其他的参数,这样他就只能访问这个list了.

下面说下他的为什么能去调用delete方法,下面是delete方法的请求映射.

 @RequestMapping(value = "/{id}", method = RequestMethod.DELETE, produces = "text/html")

主要是他看他的method的参数,因为参数不同,所以他访问的是delete方法,而且这个方法的调用必须在页面的form表单里面写上这个隐藏域:

<input type="hidden" name="_method" value="DELETE">

很明显可以看出来这两个红色的是对应的,而且RequestMethod提供的参数不多,所以那么我们如何来实现自己的方法请求映射了其实直接可以来设置方法所对应的@RequestMapping(value = "/......"}的路径不同来做映射.

在struts的action配置中他是用不同的action的method参数来做映射的

而springroo却是用访问路径的RequestMapping来做映射的.



原创粉丝点击