Javaに関する様々な情報をご紹介します。

9動的アクション・フォームBean

Javaに関する様々な情報をご紹介します。

動的アクション・フォームBean

ここでは、Struts動的アクション・フォームBeanの利用方法について解説します。

実行環境
  • ・WindowsXP Home Edition
  • ・J2SDK 1.4.2_04
  • ・Tomcat 5.0.18
  • ・Struts 1.2.4

概要

動的アクション・フォームBeanとは、アクション・フォームBeanを自動的に生成する方法です。アクション・フォームBeanには通常、定型的なアクセスメソッドを記載するだけであるため、その部分を自動化したものです。アクション・フォームBeanの設定はstruts-config.xmlで行います。

アクション・フォームBeanと動的アクション・フォームBeanの違いの一つに、アクション・フォームBeanにプロパティ値が格納される前に呼び出されるresetメソッドを利用できるかどうかがあります。動的アクション・フォームBeanではresetメソッドを利用することができません。 また、動的アクション・フォームBeanでは、プロパティの型に基本型(int、floatなど)を利用することはできません。

struts-confgi.xmlの設定方法

struts-config.xml

<!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>
        <!-- (1)動的アクション・フォームBeanの指定 -->
        <form-bean
                    name="DynaForm"
                    type="org.apache.struts.action.DynaActionForm">
            <!-- (2)動的アクション・フォームBeanのプロパティの指定 -->
            <form-property
                            name="name"
                            type="java.lang.String" />
        </form-bean>
    </form-beans>

    <action-mappings>
        <action path="/Dyna"
                    type="struts.DynaAction"
                    name="DynaForm"
                    scope="request">
            <forward name="success" path="/exDyna2.jsp"/>
        </action>
    </action-mappings>

</struts-config>
  1. (1)<form-bean>タグで動的アクション・フォームBeanを指定します。name属性に動的アクション・フォームBeanの名前、type属性にはorg.apache.struts.action.DynaActionFormを指定します。
  2. (2)<form-property>タグで動的アクション・フォームBeanのプロパティを指定します。name属性にプロパティ名を指定します。type属性にプロパティの型を指定します。

アクセスメソッド

アクション・フォームBeanのアクセスメソッドはgetXxx( )、setXxx(データ型 変数名)ですが、動的アクション・フォームBeanのアクセスメソッドは以下の形式になります。引数に指定された値でどのプロパティのアクセスメソッドかを判別します。

【データ保持のためのアクセスメソッド】

set(プロパティ名, プロパティ値);

【データ参照のためのアクセスメソッド】

get(プロパティ名);

アクション・クラス

【DynaAction.java】アクション・クラスから動的アクション・フォームBeanのプロパティ値を取得、設定しています。

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.*;

public final class DynaAction extends Action {
    public ActionForward execute(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest req,
            HttpServletResponse res) {

        //(1)DynaActionFormクラスにキャスト
        DynaActionForm daf = (DynaActionForm)form;
        //(2)プロパティnameの値を取得
        String nameA = daf.get("name").toString();
        //(3)プロパティnameに値を設定
        daf.set("name", nameA + "_100");

        return (mapping.findForward("success"));
    }
}
  1. (1)動的アクション・フォームBeanのオブジェクトを取得する際は、DynaActionFormでキャストして取得します。
  2. (2)get(プロパティ名)でプロパティnameの値を取得し、toStringメソッドを使用し文字列に変更しています。
  3. (3)set(プロパティ名, プロパティ値)でプロパティnameに新しい値を設定しています。

実行結果

これまで説明したstruts-config.xml、DynaAction.javaを使用し、フォーム画面(exDyna.jsp)で入力した値を次の画面(exDyna2.jsp)で表示するプログラムを実行します。

【exDyna.jsp】値を入力するフォーム画面です。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head><title>動的アクション・フォームBean</title></head>
<body>

<html:form action="/Dyna">
    <%-- 入力項目 --%>
    <html:text property="name"/>
    <br><br>
    <html:submit property="submit" value="送信"/>
</html:form>

</body>
</html:html>

【exDyna2.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>動的アクション・フォームBean</title></head>
<body>

<%-- 動的アクション・フォームBeanのプロパティ値を表示 --%>
<bean:write name="DynaForm" property="name"
            scope="request" ignore="true" />
</body>
</html:html>

【exDyna.jsp】

Struts実行結果_1

【exDyna2.jsp】

Struts実行結果_2

9動的アクション・フォームBean