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が走る様になりました。