Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > オープンソース > Struts −7.アクション・フォームBean
更新日:2007/1/28
Struts−7.アクション・フォーム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). exForm.jspのフォーム画面を実行すると、<html:form action="/FormBean">で指定された"/FormBean"とstruts-config.xmlの<action>タグのpath属性が合致するアクション・クラスが実行されます。
(2). アクション・クラスが実行される際、struts-config.xmlの<action>タグのname属性に指定されるアクション・フォームBeanが実行されます。
(3). アクション・フォームBeanが実行される際、exForm.jspのフォーム画面で入力されたデータを保持するための該当のアクセスメソッドが呼び出されます。ここでは、setIdメソッドが呼び出されます。<action>タグのscope属性にrequestが指定されているため、データはrequestスコープで保持されます。
(4). アクション・クラス実行後、struts-config.xmlの指定に従い、exForm2.jspに遷移します。
(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=###



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