入力フォームの作成
ここからはサンプルソース内の実際のコードを中心にして、アプリケーションの組み立て方を紹介していきます。
まずは、入力フォームのソースを見ていきましょう。これは、<parts:InputForm>
コンポーネントを定義した「parts/InputForm.mxml」ファイルで定義しています。
よく目にする「ラベル」と「入力フィールド」が、垂直に並んだデザインです。Flexでは、これを実現するために、<mx:Form>
タグが用意されています。<mx:From>
タグの内側に<mx:FormItem>
タグを記述することで、ラベルと入力フィールドを整然と並べることができます。
<mx:Form id="nyusyukkinForm"> <mx:FormItem label="日付" width="100%"> <mx:DateField id="dateF" width="100%" /> </mx:FormItem> <mx:FormItem label="事柄" width="100%"> <s:TextInput id="kotogaraText" width="100%"/> </mx:FormItem> .... <mx:FormItem label="出金" width="100%"> <s:TextInput id="syukkinText" width="100%"/> </mx:FormItem> </mx:Form>
入力データの検証ができるValidatorタグ
ユーザーから入力されたデータを何の検証もせずにそのまま保存することは、非常に危険です。言うまでもありませんが、誤作動を引き起こし、セキュリティ上の問題にもなります。JavaのフレームワークStrutsにValidator機能があるように、Flexにも入力データを検証するためのコンポーネントが用意されています。それが、<mx:StringValidator>
などのValidatorタグです。
StrutsのValidatorでは、入力ルールをXMLファイルに記述していきますが、Flexでは、MXMLの中に直接記述することができます。
今回利用したのは、入力されたデータが、「日付かどうかを検証する<mx:DateValidator>
」「文字列の検証をする<mx:StringValidator>
」「数値を検証する<mx:NumberValidator>
」の3つです。それぞれ、文字列の長さや数値の範囲を指定できます。Validatorの定義部分は次のとおりです。
<fx:Declarations> <fx:Array id="formValidators"> <mx:DateValidator source="{dateF}" property="text" /> <mx:StringValidator source="{kotogaraText}" property="text" minLength="1" maxLength="40"/> <mx:NumberValidator source="{nyukinText}" property="text" minValue="0" /> <mx:NumberValidator source="{syukkinText}" property="text" minValue="0"/> </fx:Array> </fx:Declarations>
source
プロパティに入力フィールドのコンポーネントを指定し、property
にどのプロパティを検証するのかを指定します。例えば、「nyukinText.text」を検証したい場合には、source
に"nyukinText"
を、property
に"text"
を指定します。このとき、Validatorのような非ビジュアルコンポーネントは、<fx:Declarations>
タグの内側に記述することになっています。
また、これらのValidatorを<fx:Array>
タグで囲っていますが、このように記述しておくことで、値が妥当かどうかを簡単なコードで検証できるようになります。以下が、入力されたデータかどうかを検証している部分です。
// 入力されたデータが妥当かどうか検証する var res:Array = Validator.validateAll(formValidators); if (res.length > 0) { Alert.show("不正なデータがあります。内容を確認してください。"); return; }
Validator.validateAll()
メソッドにValidatorの一覧が入った配列を指定すると、そのすべてを検証して、失敗したものを配列として返します。もし、不正なデータがあればエラーメッセージを表示します。