今までのサンプルでは一つのURLに対して一つのコントローラを割り当ててきた。
MultiActionControllerでは複数のURLを一つのコントローラの各対応するメソッドに割り当てることが出来る。
このコントローラを使用してサンプルを作成してみる。
サンプルとして、メニュー画面の項目2と項目3をクリックした際の処理を
このMultiActionControllerで行ってみる。
urlやコントローラ名などを以下のように決めておく。
コントローラ名 | multiTestController | MultiActionControllerを継承したコントローラ |
---|---|---|
コントローラクラス | com.ziqoo.web.controller.MultiTestController | |
JSPファイル | WEB-INF/jsp/multiTest.jsp | 処理結果を表示する画面 |
url | メソッド名 | 備考 |
---|---|---|
/item2.htm | exec2 | 項目2に対応 |
/item3.htm | exec3 | 項目3に対応 |
MultiTestControllerクラスを作成する。
MultiActionControllerを継承し、メソッドexec2とexec3を実装する。
処理内容はそれぞれ
"項目2がクリックされました。"
"項目3がクリックされました。"
と表示するだけにしておく。
package com.ziqoo.web.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; public class MultiTestController extends MultiActionController { public ModelAndView exec2(HttpServletRequest req, HttpServletResponse res) throws Exception { return new ModelAndView("multiTest", "message", "項目2がクリックされました。"); } public ModelAndView exec3(HttpServletRequest req, HttpServletResponse res) throws Exception { return new ModelAndView("multiTest", "message", "項目3がクリックされました。"); } }
結果を表示するmultiTest.jspの内容は以下のとおり。
<%@page pageEncoding="Shift_JIS" contentType="text/html; charset=Shift_JIS" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <link rel="stylesheet" type="text/css" href="css/main.css" /> <title>springapp</title> </head> <body> <h3>MultiActionControllerのテスト</h3> <hr> <ul> <li><c:out value="${message}"/></a> </ul> <hr> <a href="<c:url value="menu.htm"/>">メニュー</a>  </body> </html>
URLに対するメソッドのマッピングはPropertiesMethodNameResolverクラスを使用する。
その為の設定をspringapp-servlet.xmlファイルに追記する。
--- 省略 --- <bean id="methodNameResolve" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> <property name="mappings"> <props> <prop key="/item2.htm">exec2</prop> <prop key="/item3.htm">exec3</prop> </props> </property> </bean> --- 省略 ---
さらにコントローラクラスとコントローラに対するURLマッピングも追記する。
--- 省略 --- <bean id="multiTestController" class="com.ziqoo.web.controller.MultiTestController"> <property name="methodNameResolver"> <ref bean="methodNameResolve" /> </property> </bean> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/menu.htm">menuController</prop> <prop key="/productSearch.htm">productSearchController</prop> <prop key="/productList.htm">productListController</prop> <prop key="/productDetail.htm">productDetailController</prop> <prop key="/item2.htm">multiTestController</prop> <prop key="/item3.htm">multiTestController</prop> </props> </property> </bean> --- 省略 ---
メニュー画面から、項目2をクリックする。
"項目2がクリックされました。"と表示される。
同様に項目3をクリックすると
"項目3がクリックされました。"と表示される。