Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > オープンソース > Struts −12.アクション・クラス:LookupDispatchAction
更新日:2006/6/4
Struts−12.アクション・クラス:LookupDispatchAction
ここでは、Strutsのアクション・クラスの内、LookupDispatchActionクラスについて解説します。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・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ボタンが複数あるフォーム画面です。
Struts実行結果_1
【submitA.jsp】「送信A」ボタンをクリックした実行結果です。
Struts実行結果_2



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道