*

Struts1.3

DynaActionForm (Struts)

DynaActionForm

  • ActionFormはリクエストパラメータの値をJavaBeanにセットしてくれるが、プロパティやgetter/setterメソッドのコーディングをする必要があった。
  • Strutsには、そのコーディング不要のActionFormとしてDynaActionFormという仕組みがある。

 

DyanActionFormの使用方法

  • Struts設定ファイルに(struts-config.xml)記述する
  • 記述例
<form-bean name=”論理名”
type=”org.apache.struts.action.DynaActionForm” >
<form-property name=”id” type=”java.lang.Integer” initial=”0″/>
<form-property name=”name” type=”java.lang.String” />
</form-bean>

 

  •  type属性に「org.apache.struts.action.DynaActionForm」を指定
  • form-property要素のname属性にActionFormのプロパティ名を指定
  • form-property要素のtype属性にはプロパティの型を指定
  • 必要に応じてinitial属性を定義することでプロパティの初期値を指定できる

 

DyanActionFormで使用できる型

使用可能なプロパティ 解釈出来ない出来ない場合に値を設定しようとした場合
java.math.BigDecimal (例外発生)
java.math.BigInteger (例外発生)
boolean と   java.lang.Boolean FALSE
byte と   java.lang.Byte 0
char と   java.lang.Character (1文字目のみ設定)
java.lang.Class (例外発生)
double と   java.lang.Double 0
float と java.lang.Float 0
int と java.lang.Integer 0
long と java.lang.Long 0
short と java.lang.Short 0
java.lang.String (すべての値が解釈される)
java.sql.Date (例外発生)
java.sql.Time (例外発生)
java.sql.Timestamp (例外発生)

 

  • 省略した場合は、プロパティが基本データ型の場合は例外が発生し、オブジェクトの場合は、String型を除いてnullが設定
  • String型は空行が設定される.
  •  例外が発生して該当機能が使えない場合があるので、特別な理由がない限り、initial属性は、設定する方が安全である。
  • 上記の表以外にも配列やその他の型を使用することもできる。

Strutsの日本語対応 (Struts)

Strutsによる日本語対応

  1. setCharacterEncoding()メソッドを実行するフィルタを設定
  2. ActionFormBeansのreset()メソッドに記述
    (個々のActionFormBeansすべてに記述が必要)
  3. org.apache.struts.action.RequestProcessorのprocessPreprocess()メソッドをオーバライドし、その中でsetCharacterEncoding()メソッドを実行する。
  4. setCharacterEncoding()メソッドを使用せずに、Stringクラスを用いた文字コード変換を行う

 

①の方法が最も、オーソドックス

ActionForm (Struts)

ActionFormの動作

  • 通常のサーブレットプログラムでは、javax.servlet.http.HttpServletRequestのgetParameter()メソッドを利用して、リクエストパラメーとを取得するが、Strutsでは設定ファイルでActionFormを使用するように定義されていると、自動的にリクエストパラメータの値を読み込んで、ActionFormのプロパティに設定する。
  • この動作は、RequestProcessorによってActionのexecute()メソッドが実行される前に行われる。
    (Actionのexecute()メソッドでは、HttpServletRequestでなく、ActionFormを利用してリクエストパラメータの値を取得することができる)

 

ActionFormの作成

  • org.apache.struts.action.ActionFormを継承して作成
  • フォームから受け取りたいリクエストパラメータをプロパティとして宣言
    (private でフォールド変数を作成)
  • プロパティの値を取得・設定するためのgetter/setterメソッドを実装する

※ActionFormを使用する為の設定をStruts設定ファイルに記述すること

 

 

Struts設定ファイル (Struts)

Struts設定ファイル

  • Strutsを利用したアプリケーションの動作は、Struts設定ファイルに記述してある内容によって決定される。
  • ActionSevletからRequestProcessorが起動されるときに読み込まれ、その設定内容に応じてモジュールの準備整えられる。
  • Struts設定ファイルをどこに配置するかは、ActionServletの設定をweb.xmlにおこなうときに指定する。
  • シングルモジュールのStrutsアプリケーションの場合は、/WEB-INF/デレクトリに配置し、名前をstruts-config.xmlとすることが一般的である。

 

  • Struts設定ファイルに設定できる情報
    • URLと起動するActionの関連情報
    • Action実行時に使用されるリソースの情報
    • ActionFormの情報
    • メッセージリソースの情報
  • Struts設定ファイルのルート要素は、struts-config要素である。

 

Struts設定ファイルの主要な要素

  1. form-beans要素
  2. global-exceptions要素
  3. global-forwards要素
  4. action-mappings要素
  5. controller要素
  6. message-resources要素
  7. plug-in要素

 

1. form-beans要素

  • アプリケーションで使用するActionFormに関する情報を記述、strutsアプリケーションで使用するActionFormクラス名とインスタンス名を関連つける重要な要素である。
  • form-bean要素の属性
属性名 必須 説明
name  ActionFormのインスタンスを識別するための名前を指定
type  ActionFormのクラス名を完全修飾名で指定
  • form-beans要素は、form-property要素を子要素として持つ場合がある。
    (DynaActionFormかそのサブクラスを使用した場合に必要になる。)
  • form-property要素の属性
属性名 必須 説明
intial  この要素で指定するプロパティの初期値を指定
name  この要素で指定するプロパティの名称を指定
size  このプロパティが配列の場合、この属性の値の長さで 配列を初期化する
type  ActionFormのクラス名を完全修飾名で指定

 

2. global-exceptions要素

  • Actionにより例外がスローされたときの振る舞いについて設定をする。
  • global-exceptions要素は、exception要素を子要素として持ち、詳細な設定は、exception要素で行う
  • exception要素の属性
属性名 必須 説明
path 例外発生時のフォワード先リソースを、アプリケーションルートから相対パスで指定
key 例外発生時にエラーメッセージを検索するキーの値を指定
対応する値がメッセージリソースに存在する必要がある。
type ハンドリングする例外クラスの完全修飾名で指定
handler 例外ハンドラクラスの完全修飾名で指定

 

 

3. global-forwards要素

  • グローバルフォワードに関する情報を設定する。
  • すべてのAcrionから使用されるActionFowwardをこの要素で設定
  • forward要素を子要素として持つ
属性名 必須 説明
module  フォワードするモジュール名を指定
モジュール名はスラッシュ(/)から始まる
name  ActionForwardを識別するための名前
path  フォワードするJSPなどのリソースをアプリケーションルートからの相対パスで指定
redirect  リダイレクトからフォワードを設定する
true — リダイレクト
false —- フォワード(デフォルト)

 

4. action-mappings要素

  • この要素で設定された内容に基づき、AcionMappingが生成される。
  • Action-mapping要素には特に重要な属性はなく、主な設定は子要素であるAction要素で指定する。
  • action要素の属性
属性名 必須 説明
path  Actionを起動するURLを指定
先頭は / (スラッシュ)で始まる
type  RequestProcessorより呼び出されるActionの完全修飾名で指定
forward  Action以外のリソースをアプリケーションルートから相対パスで指定
Actionを経由失せずに、他のリソースへフォワードする時に使用
include  Action以外のリソースをアプリケーションルートから相対パスで指定
Actionを経由せずに、他のリソースをインクルードする時に使用
parameter  Actionに追加情報を渡す時に指定
roles  このActionへのアクセスを許可されたセキュリティロール名のカンマ区切りのリストを指定
name  使用するAcionFormのインスタンス名を指定
対応するform-bean要素のname属性の値と一致させる
attribute  name属性で指定したActionFormをスコープに登録する際の名前を指定
デフォルトはname属性
scope  name属性で指定したActionFormをスコープに登録するのかをrequest、 sessionのいづかを指定
validate  name属性で指定したActionFormをスコープに登録する際の名前を指定
デフォルトはname属性指定したActionFormにおいて、validate()メソッドによる検証を行うかどうかを指定
true を指定した場合、validate()メソッドが呼び出される
デフォルトはfalse
input  validate属性がtrueの場合にvalidate()メソッドが返すActionErrorsのサイズが0でないとき(検証が失敗したとき)に表示されるページを指定
unknown  このActionをデフォルトのActionとする際にtrueを指定
いずれかのActionにも関連付けられていないリクエストがあった場合に、このunknown属性にtrueを指定できるActionは1つだけである

※ いずれかを1つ指定する必要がある

 

 

Actionを作成する (Struts)

Action

  •  Actionは、モデルを呼び出す為のクラスでorg.apache.struts.action.Actionを継承して開発者が作成する。
  •  Strutsは、モデルに関与しないため、通常のJavaであってもEJBであっても構わない。
  •  Actionは、HTTPリクエストにしたがってモデルを呼び出し、終了後はモデルにより生成された結果をコンテキストに保存する。
  • Strutsでは、ActionServletが唯一のサーブレットであるため、ActionはActionServletからRequestProcessor経由で処理を引き継ぐ為サーブレットで、できることはActionでもほぼ実現可能・
  • Action内でJavaBeanの生成やビジネスそうの検証を行うことも多く、画面遷移も制御するため、Strutsでは、このクラスの実装が大きなウエイトを占める。

 

Actionのexecute()メソッド

  • Actionを作成する場合、開発者は、org.apache.struts.action.Actionを継承したクラスを作成し、execute()メソッドをオーバーライドする。
  • execute()メソッドは、ビジネスロジックの呼び出しを実現し、フォワード先を指定する。

 

  • execute()の引数
    • ActionMapping : org.apache.struts.actionパッケージのクラスでActionに関する設定を管理する。
    • ActionForm : org.apache.struts.actionパッケージのクラスで、HTMLの入力フォームのデータを管理する。
    • HttpServletRequest : org.apache.struts.actionパッケージのクラスで、ユーザからの要求を表す。
    • HttpServletRequest : org.apache.struts.actionパッケージのクラスで、ユーザへの応答を表す

 

  • HttpServletRequest : org.apache.struts.action.Actionのexecute()メソッドの戻り値
    • ActionForward : org.apache.struts.actionパッケージのクラスで、遷移先に関する設定を管理する。

 

 

ActionMappingとActionForward

  • ActionMappingとActionForwardは、Struts設定ファイルに記述された内容を管理するクラスで開発者が作成するものではない。

 

  • ActionMappingとは
    • ActionMappingはリクエストされたURLとActionの関連付けを担当し、RequestProcesserにおいてリクエストのURLからActionを呼び出すときに利用される。
      • どのActionを実行するのかを識別するコマンド名のようなものと考えることができる。
      • また、Actionのexecute()メソッドの引数にもActionMappingがあるので、このメソッドの中で、ActionMappingが持つデータを取り出し、操作することも可能
      • ActionMappingのインスタンスは、Struts設定ファイルのaction要素の情報から、自動生成される。
      • ActionMappingのインスタンスは、action-mapping要素の中にある、action要素の数と同じだけ作成される。
    • ActionMappingのもう一つの重要な役割は、ActionFormとActionの関連付けである。

 

  • ActionForwardとは
    • ActionForwardは、Action終了後の遷移先を保持するクラスである。
    • ActioForwardのインスタンスはStruts設定ファイルの記述にしたがって自動生成され、最終的にどこに遷移するかをAction内に記述する。
    • Struts設定ファイルにおいてActionForwardを設定するのは、global-forwards要素、action要素にネストされるforward要素である。
    • global-forward要素で指定するとActionForwardは複数のActionから参照され、グローバルフォワードという。
    • forward要素で指定するActionForwardは、上位のaction要素で呼び出されるActionからのみ参照され、ローカルフォワードと言う。

 

ActionMappingのメソッドとAction

  • ActionMappingはorg.apache.struts.config.ActionConfigのサブクラスで、ActionConfigで用意されているメソッドを利用することにより、action要素の各属性値を取得することができる。
    • path   ——–   getPath()
    • type ——— getType()
    • input ———-getInput()
    • name ———- getName()
    • scope ———- getScope()
    • validate ———–getValidate()

 

  • ActionMappingメソッド
    • findForward(String name)
      • 引数で指定した文字列をname属性に持つforward要素の情報をActionForwardインスタンスとして返す
      • action要素にネストされたforward要素のname属性を調べ、見つからない場合は、global-forward要素にネストされたforward要素のnameを調べる。
      • そして、引数とマッチするものがあればそのforward要素をActionForwardとして返し、みつからなければnullを返す
    • getInputForward()
      • action要素のinput属性で指定されるリソースへのActionForwardインスタンスを返す

 

Actionの処理

  • ActionFormを使用可能なように型変換を行う
  • ビジネスロジックを呼び出す
  • ビジネスロジックの処理結果をコンテキストに登録
  • 遷移先のActionForwardをRequestProcessorに返す