アクション・クラス:LookupDispatchAction
ここでは、Strutsのアクション・クラスの内、LookupDispatchActionクラスについて解説します。
- 実行環境
-
- ・WindowsXP Home Edition
- ・Tomcat 5.0.18
- ・Tomcat 5.0.18
- ・Struts 1.2.4
概要
LookupDispatchActionクラスはフォーム画面内で、submitボタンが複数ある場合に使用するアクション・クラスです。submitボタンごとそれぞれの処理を実行することができます。DispatchActionクラスもsubmitボタンが複数ある場合に使用するアクション・クラスですが、DispatchActionクラスはsubmitボタン名と処理するメソッド名が必ず同じでなければなりません。そのため、submitボタン名に日本語を使用することができません。
LookupDispatchActionクラスは処理するメソッドの情報を、Mapオブジェクト(メッセージ・リソースファイルのキーとメソッド名の組み合わせ)で保持します。submitボタン名はメッセージ・リソースファイルのキーに対する値になります。そのため、値に日本語を使用することで、submitボタン名に日本語を使用することができます。
- LookupDispatchActionクラスの作成ポイント
-
- アクション・クラスは、LookupDispatchActionクラスを継承して作成します。
- アクション・クラスは、Mapオブジェクトを作成するためのgetKeyMethodMapメソッド、submitボタンごとの処理メソッドで構成されます。
- submitボタンごとの処理メソッドは、Actionクラスのexecuteメソッドと同じ形式をとります。
- メッセージ・リソースファイルのキーの値に日本語を使用する場合は、native2asciiコマンドでエンコードしておく必要があります。
使用例
フォーム画面にsubmitボタンを2つ作成し、submitボタンそれぞれの処理を実行するプログラムを例に、LookupDispatchActionクラスの使用方法について解説します。
【exLookupDispatch.jsp】submitボタンを複数持つ、フォーム画面です。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<html:html>
<head><title>exLookupDispatch.jsp</title></head>
<body>
<html:form action="/ExLookupDispatch">
<%-- (1)property属性を指定 --%>
<html:submit property="exeMethod">
<%-- (2)メッセージ・リソースファイルの値を表示 --%>
<bean:message key="submit.a"/>
</html:submit>
<br><br>
<html:submit property="exeMethod">
<bean:message key="submit.b"/>
</html:submit>
</html:form>
</body>
</html:html>
- (1)property属性にstruts-config.xmlの<action>タグのparameter属性と同一の値を指定します。
- (2)<bean:message>タグを使用し、メッセージ・リソースファイルに記載されるsubmitボタン名を表示します。
【submitA.jsp】「送信A」ボタンをクリックした際に実行されるJSPプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html>
<head><title>submitA.jsp</title></head>
<body>
送信Aボタンをクリック。
</body>
</html:html>
【submitB.jsp】「送信B」ボタンをクリックした際に実行されるJSPプログラムです。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html>
<head><title>submitB.jsp</title></head>
<body>
送信Bボタンをクリック。
</body>
</html:html>
【ExLookupDispatchForm.java】アクション・フォームBeanです。今回は何の処理も行いません。
package struts;
import org.apache.struts.action.*;
public final class ExLookupDispatchForm extends ActionForm {
}
【ExLookupDispatchAction.java】LookupDispatchActionクラスを継承したアクション・クラスです。
package struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;
//(1)該当パッケージをインポート
import org.apache.struts.actions.*;
import java.util.*;
//(2)LookupDispathcActionクラスを継承
public final class ExLookupDispatchAction
extends LookupDispatchAction {
//(3)getKeyMethodMapメソッドを宣言
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("submit.a", "methodA");
map.put("submit.b", "methodB");
return map;
}
//(4)「送信A」ボタンクリック時に実行されるmethodAメソッドを宣言
public ActionForward methodA(ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
return (mapping.findForward("methodA"));
}
//(5)「送信B」ボタンクリック時に実行されるmethodBメソッドを宣言
public ActionForward methodB(ActionMapping mapping,
ActionForm form,
HttpServletRequest req,
HttpServletResponse res) {
return (mapping.findForward("methodB"));
}
}
- (1)LookupDispatchActionクラスを継承したクラスを宣言するために、該当のパッケージをインポートします。
- (2)LookupDispatchActionクラスを継承したExLookupDispatchActionクラスを宣言します。
- (3)getKeyMethodMapメソッドで、メッセージ・リソースファイルのキーと処理するメソッドの組み合わせをMapオブジェクトに保持します。ここでは、メッセージ・リソースファイルの"submit.a"キーを参照するsubmitボタンがクリックされた時、methodAメソッドが実行されることを表します。
- (4)"submit.a"キーを参照する「送信A」ボタンがクリックされたときに実行されるmethodAを宣言します。書式は、Actionクラスのexecuteメソッドと同一です。ここでは、単にfindForward("methodA")メソッドを実行し、struts-config.xmlに指定したページに遷移する処理のみを行っています。
- (5)"submit.b"キーを参照する「送信B」ボタンがクリックされたときに実行されるmethodBを宣言します。
【struts-config.xml】アクション・フォームBean、アクション・クラスの振る舞いを指定します。
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean
name="ExLookupDispatch"
type="struts.ExLookupDispatchForm"/>
</form-beans>
<action-mappings>
<!-- (1)アクション・クラスの振る舞いを定義 -->
<action path="/ExLookupDispatch"
type="struts.ExLookupDispatchAction"
name="ExLookupDispatch"
parameter="exeMethod">
<!-- (2)findForwardメソッド実行後の遷移先を指定 -->
<forward name="methodA" path="/submitA.jsp"/>
<forward name="methodB" path="/submitB.jsp"/>
</action>
</action-mappings>
<!-- (3)メッセージ・リソースファイルを指定 -->
<message-resources parameter="resources.application"/>
</struts-config>
- (1)<action>タグにアクション・クラスの振る舞いを定義します。parameter属性に、<html:submit>タグのproperty属性に指定された値を指定します。
- (2)<forward>タグにアクション・クラスのfindForwardメソッド実行後の遷移先を指定します。
- (3)メッセージ・リソースファイルを指定します。メッセージ・リソースファイルは\WEB-INF\classesディレクトリ配下に設置します。拡張子(.properties)は指定する必要はありません。
【application.properties】メッセージ・リソースファイルです。"submit.a"に送信A、"submit.b"に送信Bを指定し、native2asciiコマンドでエンコードしています。
submit.a=\u9001\u4fe1A
submit.b=\u9001\u4fe1B
【exLookupDispatch.jsp】submitボタンが複数あるフォーム画面です。

【submitA.jsp】「送信A」ボタンをクリックした実行結果です。

12アクション・クラス:LookupDispatchAction