您
也可以將所有相對應的方法專門組織在一個委託(delegate)物件中,而不是撰寫在Controller類別中,當請求來到時,將委託給這個物件來執
行指定的方法,您只要設定MultiActionController的"delegate"屬性參考至委託物件即可,例如委託物件可以設計如下:
package onlyfun.caterpillar; 現在不用繼承MultiActionController類別來定義您的Controller類別了,而是在定義檔中直接定義一個MultiActionController的實例:
<?xml version="1.0" encoding="UTF-8"?> 您可以使用 MultiActionController 與 ParameterMethodNameResolver 中的test.jsp網頁來呈現結果,這個程式的執行結果與 MultiActionController 與 ParameterMethodNameResolver 是相同的。 上面的程式,您也可以改使用PropertiesMethodNameResolver,例如將Bean定義檔的內容改寫為以下的內容: <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="urlMapping" class="org.springframework.web.servlet. → handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/*book.do">bookController</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet. → view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="propMethodResolver" class="org.springframework.web.servlet.mvc. → multiaction.PropertiesMethodNameResolver"> <property name="mappings"> <props> <prop key="/listbook.do">list</prop> <prop key="/addbook.do">add</prop> <prop key="/deletebook.do">delete</prop> </props> </property> </bean> <bean id="bookDelegate" class="onlyfun.caterpillar.BookDelegate"> <property name="testPage"> <value>test</value> </property> </bean> <bean id="bookController" class="org.springframework.web.servlet.mvc. → multiaction.MultiActionController"> <property name="methodNameResolver"> <ref bean="propMethodResolver"/> </property> <property name="delegate"> <ref bean="bookDelegate"/> </property> </bean> </beans> 根據以上的設定,所有以book.do為結尾的請求都會交給bookController來處理,而當請求/listbook.do時,會執行 bookDelegate的list()方法,依同樣的道理,您可以分別使用/addbook.do或/deletebook.do來執行add()或 list()方法。 |