SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Flexで作成する業務アプリケーションテクニック

バリデーション機能の実装で学ぶ、Flexでの共通フレームワークの作り方

Eclipseのプロブレムビューのような入力チェックUIをFlexで実現する


ダウンロード サンプルコード (10.0 KB)

6. フレームワーク機能詳細

 以下、今回紹介するフレームワーク機能について、もう少し詳細に解説します。記事に全ソースコードが添付されていますので、より詳しくはソースコードをご確認ください。

1. Control部品の拡張

 前述のように、機能のほとんどはValidateManagerというシングルトンのクラスが行っています。別オブジェクトを生成しなければならなかったところは、各入力部品の拡張機能に隠蔽されています。その各入力部品も、アクセサを追加しただけで、アクセサへの値代入のタイミングで、ValidateMangerにvalidate登録を投げているだけです。

2. validatorsListへの格納

 ValidateManagerはvalidatorsListを持っていて、そこに全Validatorオブジェクトを格納しています。ただし、このvalidatesListに格納されたタイミングでは、各validatorはenable=falseの状態となっています。これがenable=trueだと、valueCommitイベントで稼働してしまい、画面の最後でのValidate実行ができなくなっています。

3. 最初のvalidate処理の実行

 画面の最後でのValidate実行は、単純にValidateMangerにセットされているリスナーから行われます。イベントが発生すると、validatesListに格納されている各validatorを取り出して、validateを行います。さらにenable=trueとして、次からはvalueCommitイベントでvalidateが稼働するようにしています。

 また、最初のvalidate処理が稼働した後にvalidatesListにvalidatorが追加される場合は、(2)で述べたようにenable=falseとするのではなく、enable=trueとしています。この処理の切り分けを行うために、triggerDispatchedListを用意して、triggerが稼働したタイミングで登録するようにしています。

4. Validate結果の制御

 (3)により、validateが稼働すると、validatorはValidationResultEventを発行します。これはvalidationResultHandlerに集約されます。結果がinvalidの場合、ErrorModelオブジェクトを生成して、それをerrorListに格納します。errorListを画面上のデータグリッドに関連付ければエラー表示が可能です。このErrorModelオブジェクト生成の際に、該当入力部品の直上にあるFormItem部品を探して、そのlabelプロパティを取得してErrorModelオブジェクトに格納しています。これはエラーリストにエラーを表示した際に、どの部品かをユーザーが分かりやすくするために論理IDとして取得しているものです。今回はForm部品を使っていることを前提にしていますが、必須アスタリスク表示をしたり、レイアウトをある程度自動で決めてくれたりと、便利ですのでぜひ利用をお勧めします。

 エラーリストを格納した後、すべてのValidatorのイベントが帰ってきたかどうかを確認してイベントを発行しています。ALLVALIDイベントは、すべてのValidateが成功だった時に発行し、INVALIDイベントは一つでもエラーがあった場合に発行しています。

5. Alertをポップアップ

 INVALIDエラーが発生した場合、AlertをPopUpさせます。エラーのたびにAlertを出していては邪魔なので、フラグを使って一回しかでないように制御しています。

6. Validate設定のクリア処理

 最後にクリア処理について説明します。クリア処理は、Triggerが稼働してない最初の状態に戻す処理を行っています。例えば、2つ画面があって、2つ目の画面の登録途中、前の画面の登録を見直したくなった場合、ユーザーは前の画面に戻りますが、そのあと、再度2つ目の画面に遷移した際に、初期状態に戻しておくという処理です。

 この処理は、clearValidateにて実装していますが、validationListの各validatorをenable=falseにしており、triggerDispatchedListから履歴を削除し、errorListを空にしています。

7. まとめ

 Flexは、Flashがもともとはアニメーション作成用のアプリケーションだったこともあって、コンシューマ向けのサイトやアプリケーションなどの用途が主に語られています。しかしこのように通常の業務画面であっても、奇をてらわずに、RIAならではの特徴を存分に生かした画面作成ができます。

 単純な入力・出力だけのWeb画面であれば、RIAの必要はないという風潮がありますが、私は必ずしもそうは思いません。そうした画面であっても、RIAの恩恵を大きく受ける機能を実装できるのでぜひ試してみてください。そして、その際には実装をより簡単に、かつ直観的にできるような機能の整理や、共通機能・フレームワーク機能を用意して、生産性を向上させることにチャレンジしてみてください。

「FlexではじめるRIA開発」特集、絶賛公開中!

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
この記事の著者

土佐 鉄平(とさ てっぺい)

・某金融機関のユーザ系SEとして仕事しております。 ・Flexを使ったRIA開発をメインに担当。非コンシューマ向けシステムへのFlex導入に実績・有。・ブログteppei-studioでもFlexなどのTipsを紹介中。  

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3645 2009/10/20 17:15

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー