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

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Struts 1.2.4
概要
アクション・クラスとはStrutsアプリケーション内で、ビジネスロジックを担当する部分です。アクション・クラスにビジネスロジック処理を記述したり、ビジネスロジック処理を行う外部プログラムを呼び出したりします。

アクション・クラスはStrutsであらかじめ用意されているクラスを継承して作成します。あらかじめ用意されているクラスには以下のクラスがあります。
クラス名
内容
Action
アクション・クラスの基本となるクラスです。
ForwardAction
ビジネスロジックの処理を行わず、リクエストの転送のみを行うクラスです。
IncludeAction
サーブレットなど指定した外部プログラムを実行させる処理のみを行うクラスです。
SwitchAction
異なるStrutsアプリケーション内のプログラムと連携するためのクラスです。
DispatchAction
フォーム内に複数のボタンを利用するプログラムを処理するクラスです。ボタンと関連するプログラム名は同一でなければなりません。
LookupDispatchAction
DispatchActionクラスと同様に、フォーム内に複数のボタンを利用するプログラムを処理するクラスです。DispatchActionクラスとの違いは、ボタンと関連するプログラム名の情報をMapオブジェクトで保持している点です。
使用例
アクション・フォームBeanのアクセスメソッドはgetXxx( )、setXxx(データ型 変数名)ですが、動的アクション・フォームBeanのアクセスメソッドは以下の形式になります。引数に指定された値でどのプロパティのアクセスメソッドかを判別します。
(1). exAction.jspのフォーム画面で10乗する数値を入力し、実行すると、<html:form action="/ExAction">で指定された"/ExAction"とstruts-config.xmlの<action>タグのpath属性が合致するアクション・クラスが実行されます。
(2). アクション・クラスが実行される際、struts-config.xmlの<action>タグのname属性に指定されるアクション・フォームBeanが実行されます。アクション・フォームBeanで、入力された数値を保持します。
(3). アクション・クラス(ExActionAction.java)で入力された数値を10乗し、値をアクション・フォームBeanに保持します。
(4). アクション・クラス(ExActionAction.java)でfindForward("success")メソッドが実行されると、struts-config.xmlの<forward>タグの合致する値"success"の遷移先、exAction2.jspに遷移します。
(5). exAction2.jspでは、<bean:write>タグでアクション・フォームBeanに保持された10乗された値を参照、表示します。
【exAction.jsp】フォーム画面を作成します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>アクション・クラス</title></head>
<body>

<%-- <html:form>タグのaction属性で
     実行されるアクション・クラスを指定します。 --%>
<html:form action="/ExAction">
  <html:text property="countNum"/>
  <br><br>
  <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>
【exAction2.jsp】アクション・フォームBeanに保持されたデータを表示します。
<%@ 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>アクション・クラス</title></head>
<body>

<%-- アクション・フォームBeanに保持される
     countNumプロパティを参照します。 --%>
<bean:write name="ExAction" property="countNum"
            scope="request" format="######" />

</body>
</html:html>
【ExActionForm.java】アクション・フォームBean ExActionForm.javaを作成します。
package struts;

import org.apache.struts.action.*;

public final class ExActionForm extends ActionForm {

  private int countNum;
  // countNumプロパティを保持するメソッドです。
  public void setCountNum(int countNum) {this.countNum = countNum;}
  // countNumプロパティを参照するメソッドです。
  public int getCountNum() {return countNum;}

}
【ExActionAction.java】アクション・クラスExActionAction.javaを作成します。
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)Actionクラスを継承して、ExActionActionクラスを宣言します。
public final class ExActionAction extends Action {
  public ActionForward execute(ActionMapping mapping, 
         ActionForm form,
         HttpServletRequest req, 
         HttpServletResponse res) {

    //(2)キャストし、アクション・フォームBeanの
        ExActionオブジェクトを取得します。
    ExActionForm eaf = (ExActionForm)form;
    int countNum = eaf.getCountNum();
    int countNum2 = eaf.getCountNum();

    //(3)フォームに入力された値を10乗します。
    for (int i = 0; i < 9; i++) {
      countNum = countNum * countNum2;
    }

    //(4)10乗された値をアクション・フォームBeanに保持します。
    eaf.setCountNum(countNum);
    //(5)アクション・クラス実行後の遷移先を指定します。
    return (mapping.findForward("success")); 
  }
}
(1). Actionクラスを継承して、アクション・クラスExActionActionクラスを宣言します。
(2). ActionFromクラスのオブジェクトformをキャストし、ExActionFormクラスのオブジェクトeafを取得します。 アクセスメソッドgetCountNumを実行し、フォーム画面で入力された数値を取得します。
(3). 取得した数値を10乗します。
(4). アクセスメソッドsetCountNumを実行し、10乗された値をアクション・フォームBeanに保持します。
(5). findForwardメソッドを実行し、引数に指定された値"success"と合致するstruts-config.xmlの<forward>タグに指定された遷移先に遷移します。
【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>

  <!-- (1)アクション・フォームBeanを指定します。 -->
  <form-beans>
    <form-bean
     name="ExAction"
     type="struts.ExActionForm" />
  </form-beans>

  <action-mappings>
    <!-- (2)アクション・クラスの振る舞いを指定します。 -->
    <action path="/ExAction"
     type="struts.ExActionAction"
     name="ExAction"
     scope="request">
      <!-- (3)アクション・クラス実行後の遷移先を指定します。 -->
      <forward name="success" path="/exAction2.jsp"/>
    </action>
  </action-mappings>

</struts-config>
(1). <form-beans>タグで、アクション・フォームBeanの論理名とクラス名を指定します。
(2). <action>タグのpath属性に、JSPのフォーム画面から指定される値を指定します。type属性にアクション・クラス名を指定します。name属性にアクション・クラスが実行されたときに実行されるアクション・フォームBeanの論理名を指定します。scope属性にアクション・フォームBeanに保持されるプロパティのスコープを指定します。
(3). <forward>タグで、アクション・クラスでfindForwardメソッドが実行された際の遷移先を指定します。
【exAction.jsp】
Struts実行結果_1
【exAction2.jsp】
Struts実行結果_2



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