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

7アクション・フォームBean

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

アクション・フォームBean

ここでは、Strutsアクション・フォームBeanについて解説します。

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

概要

アクション・フォームBeanはフォーム画面から送信されてくるデータの保持、他のプログラムからのデータの参照を行う機能を持っています。アクション・フォームBeanにはデータの保持・参照を行うためのメソッド(アクセスメソッド)を指定する必要があります。アクセスメソッドは以下の形式になります。

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

public setXxx(データ型 変数名);

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

public 戻り型 getXxx( );

アクセスメソッドは他のプログラムから呼び出されるため、publicを指定する必要があります。Xxxにはプロパティ名が入ります。プロパティ名はフォームの<html:text property="id"/>でいうproperty属性に指定された値になります。プロパティ名の最初の文字は大文字にする必要があります。

アクション・フォームBeanで値を保持する際に、その値のスコープを指定することができます。スコープはstruts-config.xmlで指定します。指定できるスコープはrequestスコープと、sessionスコープです。

動作例

フォーム画面(exForm.jsp)で入力したデータを他の画面(exForm2.jsp)で表示するプログラムを例に、アクション・フォームBeanの動作について解説します。

  1. (1)exForm.jspのフォーム画面を実行すると、<html:form action="/FormBean">で指定された"/FormBean"とstruts-config.xmlの<action>タグのpath属性が合致するアクション・クラスが実行されます。
  2. (2)アクション・クラスが実行される際、struts-config.xmlの<action>タグのname属性に指定されるアクション・フォームBeanが実行されます。
  3. (3)アクション・フォームBeanが実行される際、exForm.jspのフォーム画面で入力されたデータを保持するための該当のアクセスメソッドが呼び出されます。ここでは、setIdメソッドが呼び出されます。<action>タグのscope属性にrequestが指定されているため、データはrequestスコープで保持されます。
  4. (4)アクション・クラス実行後、struts-config.xmlの指定に従い、exForm2.jspに遷移します。
  5. (5)exFrom2.jspの<bean:write>タグは指定されたアクション・フォームBeanのプロパティに該当するデータを参照、表示します。ここではデータを参照する際、getIdメソッドが呼び出されます。

【exForm.jsp】フォーム画面を作成します。

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%-- タグライブラリの指定 --%>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

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

<body>
<%-- htmlタグライブラリでフォームを作成 --%>
<html:form action="/FormBean">
    <%-- プロパティ名がidの入力項目を作成 --%>
    <html:text property="id"/>
    <html:submit property="submit" value="送信"/>
</html:form>
</body>

</html:html>

【exForm2.jsp】フォーム画面で入力したデータを表示します。

<%@ 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のプロパティのデータを取得、表示 --%>
<bean:write name="FormBeanForm" property="id"
        scope="request" ignore="true" />

</body>
</html:html>

【FormBeanForm.java】アクション・フォームBeanの動作を行うクラスを作成します。

package struts;

import org.apache.struts.action.*;

//アクション・フォームBeanであるFormBeanFormクラスの作成
//アクション・フォームBeanの動作を行うクラスはActionForm
//クラスを継承する必要があります。
public final class FormBeanForm extends ActionForm {

    //プロパティのデータを保持する変数を宣言
    private String id;

    //プロパティのデータを保持するアクセスメソッドを宣言
    public void setId(String id) {this.id = id;}
    //プロパティのデータを参照するアクセスメソッドを宣言
    public String getId() {return id;}

}

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

//アクション・クラスであるFormBeanActionクラスの作成
public final class FormBeanAction extends Action {
    public ActionForward execute(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest req,
            HttpServletResponse res) {

        //exForm2.jspの呼び出し、呼び出すexForm2.jspは
        //struts-config.xmlに記載
        return (mapping.findForward("success"));
    }
}

【struts-config.xml】

<?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>

    <!-- アクション・フォームBeanの指定 -->
    <form-beans>
        <form-bean
                    name="FormBeanForm"
                    type="struts.FormBeanForm"/>
    </form-beans>

    <!-- アクション・クラスの振る舞いを指定 -->
    <action-mappings>
        <action path="/FormBean"
                    type="struts.FormBeanAction"
                    name="FormBeanForm"
                    scope="request">
            <!-- アクション・クラス実行後の遷移先を指定 -->
            <forward name="success" path="/exForm2.jsp"/>
        </action>
    </action-mappings>

</struts-config>

【実行結果】 Strutsの実行方法に関してはJavaの道:Struts(基本操作)を参照してください。

Struts実行結果_1

exForm.jspで入力したデータがexForm2.jspで表示されているのが確認できます。

Struts実行結果_2

データ型

アクション・フォームBeanは数値、文字列、Boolean、オブジェクト、配列、コレクション、日付型など様々なデータ型を取り扱うことができます。

【アクション・フォームBeanの例】

package struts;

import org.apache.struts.action.*;

public final class FormBeanForm extends ActionForm {

    private int code;
    private String name;
    private boolean reply = false;
    private String[] hobby;

    //数値型のアクセスメソッド
    public void setCode(int code) {this.code = code;}
    //文字列型のアクセスメソッド
    public void setName(String name) {this.name = name;}
    //boolean型のアクセスメソッド
    public void setReply(boolean reply) {this.reply = reply;}
    //配列型のアクセスメソッド
    public void setHobby(String[] hobby) {this.hobby = hobby;}

    //数値型のアクセスメソッド
    public int getCode() {return code;}
    //文字列型のアクセスメソッド
    public String getName() {return name;}
    //boolean型のアクセスメソッド
    public boolean getReply() {return reply;}
    //配列型のアクセスメソッド
    public String[] getHobby() {return hobby;}
}

【プロパティの参照例】

<%@ 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:write name="FormBeanForm" property="code"
        scope="request" ignore="true" />
<br><br>
<%-- 文字列型のプロパティの参照 --%>
<bean:write name="FormBeanForm" property="name"
        scope="request" ignore="true" />
<br><br>
<%-- boolean型のプロパティの参照 --%>
<bean:write name="FormBeanForm" property="reply"
        scope="request" ignore="true" />
<br><br>
<%-- 配列型のプロパティの参照 --%>
<bean:write name="FormBeanForm" property="hobby[1]"
        scope="request" ignore="true" />
</body>
</html:html>

※ <bean:write>タグから数値型のプロパティを参照する際はformat属性、 もしくはformatKey属性を指定する必要があります。指定していない場合は、メッセージ・リソースファイルのorg.apache.struts.taglib.bean.format.int(整数型)、org.apache.struts.taglib.bean.format.float(浮動小数点型)のキーが参照されます。キーが指定されていない場合はエラーになります。
(例) org.apache.struts.taglib.bean.format.int=###

7アクション・フォームBean