spring MVC之将多个动作分组到一个控制器(2)
spring MVC之将多个动作分组到一个控制器(二)
spring MVC之将多个动作分组到一个控制器(二)
----------
接上一篇
将URL映射到处理器方法
默认情况下,MultiActionController利用InternalPathMethodNameResolver按名称将URL映射到处理程序方法上。然而,如果想要给被映射的方法名称添加前缀或者后缀,就必须显式地配置这个解析器。
<bean id="memberController" class="com.apress.springrecipes.court.web.MemberController"> ... <property name="methodNameResolver"> <bean class="org.springframework.web.servlet.mvc.multiaction .InternalPathMethodNameResolver"> <propery name="suffix" value="Member"/> </bean> </property> </bean>
然后,URL中扩展名前的最后部分路径将被映射到添加了Member后缀的处理程序方法上。
/member/add.htm --> addMember() /member/remove.htm --> removeMember() /member/list.htm --> listMember()
你必须改变MemberController中的方法名称,来测试这个解析器:
package com.apress.springrecipes.court.web; ... public class MemberController extends MultiActionController{ ... public ModelAndView addMember(HttpServletRequest request, HttpServletResponse response,Member member)throws Exception{ ... } public ModelAndView removeMember(HttpServletRequest request, HttpServletResponse response)throws Exception{ ... } public ModelAndView listMember(HttpServletRequest request, HttpServletResponse response)throws Exception{ ... } }
此外,你也可以配置PropertiesMethodNameResolver,通过显式地指定映射定义,将URL映射到处理程序方法上。
<bean id="memberController" class="com.spress.springrecipes.court.web.MemberController"> ... <property name="methodNameResolver"> <bean class="org.springframework.web.servlet.mvc.multiaction .PropertiesMethodNameResolver"> <property name="mappings"> <props> <prop key="/member/add.htm">addMember</prop> <prop key="/member/remove.htm">removeMember</prop> <prop key="/member/list.htm">listMember</prop> </props> </property> </bean> </property> </bean>
随后,根据映射定义中指定的名称,进行URL到处理程序方法的映射。
/member/add.htm --> addMember() /member/remove.htm --> removeMember() /member?list.htm --> listMember()
最后,可以配置ParameterMethodNameResolver,根据请求参数将URL映射到处理程序方法上,参数名称可以用paramName属性来定制。例如,如果将它设置为method,URL就会被映射到名称与请求参数method的值相同的处理程序方法。请注意,以下URL中的通配符可以与任何字符串相匹配。
/member/*.htm?method=addMember --> addMember() /member/*.htm?method=removeMember --> removeMember() /member/*.htm?method=listMember --> listMember()