Validationを実装する
実装場所はSubmitWindowになります。
以下のような定義をしました。
SubmitWindow.mxml(抜粋)
<!-- Validator定義 --> <mx:EmailValidator field="message.mail" invalidCharError="メールアドレスに不正な文字が含まれています" invalidDomainError="メールアドレスのドメインが不正です" invalidIPDomainError="メールアドレスのIPが不正です" invalidPeriodsInDomainError="メールアドレスにピリオドが続けて入力されています" missingAtSignError="メールアドレスに@マークがありません" missingPeriodInDomainError="メールアドレスにピリオドがありません" missingUsernameError="メールアドレスにユーザー名がありません" tooManyAtSignsError="メールアドレスに@マークが多すぎます"/> <mx:StringValidator field="message.subject" minLength="1" maxLength="100" tooLongError="タイトルが長過ぎます(100文字以内)" tooShortError="タイトルが入力されていません"/> <mx:StringValidator field="message.userName" minLength="1" maxLength="50" tooLongError="お名前が長過ぎます(50文字以内)" tooShortError="お名前が入力されていません"/> <mx:StringValidator field="message.content" minLength="1" maxLength="3000" tooLongError="内容が長過ぎます(3000文字以内)" tooShortError="内容が入力されていません"/>
ごちゃごちゃとエラーメッセージが書いてあります。ここを設定しないことには、エラーメッセージが英語になってしまいますので、しかたがありません。
そして、このValidateをするタイミングですが、OKボタンを押した時、つまりinsertNewMessage()メソッド内で行えば良いです。
SubmitWindow.mxml(抜粋)
function insertNewMessage():Void { applyChanges(); var result = Validator.isStructureValid(this,"message"); if (!result) return; if (isRes) { parentDocument.insertResMessage(message); } else { parentDocument.insertNewMessage(message); } deletePopUp(); }
はたしてこんなコーディングで良いのかいまいち良く解りません。しかし、内容を空にしてOKボタンを押すと「内容が入力されていません」というダイアログが表示されます。ただし、問題はエラーの数だけ警告ダイアログが表示されてしまうという点です。タイトルと名前を空欄にすると、ダイアログが2つ重なって表示されます・・・まぁ、実用上は問題ないので、とりあえずそのままにしておきますが、もっと大きな問題はメールアドレスの扱いです。
メールアドレスは任意で入力させたいと思います。つまり入力しなくても良いが、入力されたらValidateしたい・・こんな時には状況によってValidatorのチェック項目のOn/Offが可能です
上記メソッドをこのように変更します。
SubmitWindow.mxml(抜粋)
function insertNewMessage():Void { applyChanges(); if (message.mail == "") { Validator.disable(this,"message.mail"); } else { Validator.enable(this,"message.mail"); } var result = Validator.isStructureValid(this,"message"); if (!result) return; if (isRes) { parentDocument.insertResMessage(message); } else { parentDocument.insertNewMessage(message); } deletePopUp(); }
Validatorのstaticなメソッド、disable()、enableで切り替える事が可能です。これでメールが入力された時だけValidatorが走る様になりました。