# 共通ドキュメント

## 入力フォーム

### 概要

- 設定
- Filter
- FieldValidator
- FormAdapterElement
- FormAdapter
- Form

### 設定

特にない。

Zend_Formを使用する場合はZend_Configを使う。設定内容はZend_Formにしたがう。

### Filter

入力コントロール(TextBoxなど)の入力から不要な文字を取り除く、文字入力を適切な型に変換するなど。

#### 種類

DateTimeFilter | 日付用。入力文字列が日付形式であると仮定して日付オブジェクトに変換する。
NumberFilter | 数値用。入力値から数値用文字列を取り除き、設定精度に基づき数値に変換する。
StringFilter | 文字列用。入力値から入力可能文字を取り除き、トリミングなどした後設定長さに基づき文字数を制限する。
DefaultFilter | 何もしない。入力をそのまま受け入れるが内容は文字列のまま。

文字列用の入力可能文字などは CFW.Util.StringUtil.NormalizeModeを参照。

### FieldValidator

入力内容の検証

#### FieldValidatorオブジェクトの生成

FieldValidator#GetInstanceを使用してFieldPropertyオブジェクトに対応したFieldValidatorを取得する。

#### 検証の実行

FieldValidator#Validate()を呼び出す。エラーメッセージはErrorMessageプロパティを参照する。

### FormAdapterElement

入力コントロール(TextBoxなど)とエンティティを紐付けるための要素。入力コントロール、Filter、FieldValidatorからなる。

#### 機能

- 外部のデータを設定する。
- 入力データを取り込む。このときFilterに従って入力内容を適宜変換する。
- 入力内容を検証する。
- 入力内容を取り出す。
- 現在の入力内容を表示する。初回は外部から設定されたデータ内容を表示する。

#### 処理手順

1. FormAdapterElementオブジェクトを生成する。
2. 外部から初期値を設定する。
3. 表示の更新
4. 入力内容の取り込み、検証
5. 入力内容取り出し。

#### 生成

入力コントロールに基づくFormAdapterElement実装クラスのオブジェクトを生成する。
必要に応じてFilter、FieldValidator、出力フォーマットを設定する。

##### 現在実装されているFormAdapterElement

- TextBoxElement(入力文字列を入力内容とする)
- DropDownListElement(ComboBox#SelectedValueを入力内容とする。従ってComboBox#Itemの設定内容は使用できずComboBox#DataSourceを設定しないと使えない。)
- CheckBoxElement(チェック内容を入力内容とする。つまりboolまたは1|0しか使えない)
- RadioButtonGroupElement(指定したRadioButtonの配列でチェックされたオブジェクトの配列内の序列を入力内容とする。)

#### 初期値設定

FormAdapterElement#SetValueを実行しエンティティのプロパティなどを要素の値に設定する()

#### 表示の更新

FormAdapterElement#Render()を呼び出して表示を更新する。

#### 入力内容の取り込み、検証

FormAdapterElement#UpdateFieldを呼び出して要素内に入力内容を取り込む。

FormAdapterElement#Validateを呼び出して検証を実行する。検証結果メッセージはFormAdapterElement#ErrorMessageに保持されている。

#### 入力内容取り出し。

FormAdapterElement#GetValueを呼び出し必要なデータを取り出す。

検証がvalidならFilterで定義した型の値をobject型で受け取れる。この時は必要な型にキャストする。

検証がinvalidなら取り出せるのは文字列型なので、エンティティのプロパティには設定できない。

### FormAdapter

エンティティと入力コントロールを紐付ける。

つまりエンティティとエンティティのプロパティ毎のFormAdapterElementを持つ。というかFormAdapterElementの塊。

通常は自動生成されたTableFormAdapterを継承するクラスを使う。

#### 機能

- エンティティのデータを設定する。
- フォームへの入力を取り込み検証する。
- フォームへの入力をエンティティに設定し、取り出す。

#### 処理手順

1. 生成
2. 初期化
3. 初期値の設定
4. 表示
5. 入力内容の取り込み、検証
6. 検証結果メッセージ表示
7. 入力内容取り出し

#### 生成

FormAdapter実装クラスのインスタンスを生成する。

#### 初期化

各FormAdapterElementを初期化する。

#### 初期値の設定

FormAdapter#setEntityを呼び出しエンティティを設定する。

#### 表示

FormAdapter#RenderView()を呼び出す。場合によっては各FormAdapterElement#Renderを呼び出す(webフォームなど)。

#### 入力内容の取り込み、検証

FormAdapter#Bind()を呼び出す。検証結果は各FormAdapterElementが保持する。

#### 検証結果メッセージ表示

各FormAdapterElementが保持するmessageを表示する。

#### 入力内容取り出し

FormAdapter#getEntityを呼び出しエンティティを取得する。

### Form

個々の画面定義

エンティティ、FormAdapter、フォーム実体からなる。適宜モデルクラスを使用してエンティティを操作する。