*

講座用

葉っぱ~

こんな葉っぱでよければ使って下さい。

画像の上で、右クリック「名前を付けて画像を保存」

葉1leaf1

 

葉2leaf2

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つ指定する必要がある