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()