Flex3.5ではUIComponent.errorStringに空文字列を入れるだけでは検証エラーをクリアできない

検証エラーをクリアするには、UIComponent.errorString プロパティに空のストリング("")を書き込みます。
...
errorString プロパティは、検証のソースとなるフィールドをリセットしたときに検証エラーが発生しないようにする場合に役立ちます。

Adobe Flex 3 ヘルプ - 検証エラーの操作

Flex3.2ではこれでよい。しかし、Flex3.5ではちょっとした問題がある。
Flex3.5では上記の方法で検証エラーのクリアを行うと、再度未入力のチェックを行った際に検証エラー文字列が表示されない。あくまで表示上の問題だが。

上記引用ページの "ResetVal.mxml" をFlex3.5でコンパイルした結果がこれ。以下の手順で1.と3.で挙動が異なる。

1. ZipCodeを選択、未入力のままフォーカスアウト → 必須フィールドエラー (「このフィールドは必須です。」表示)
2. Resetボタンを押下 → 必須フィールドエラーが消える
3. ZipCodeを選択、未入力のままフォーカスアウト → 必須フィールドエラーが出ない

因みに、Submit時に行うであろう検証チェック(Validator.validate)では、正しく検証エラー判定してくれるので問題なし。

原因はこれ。

また、UIComponent はバリデーションにおいて複数のエラーが発生した場合、「errorString」にその複数のエラー内容が追記されるように仕様変更されています。

Shigeru Nakagaki .com

UIComponentのprivateプロパティerrorObjectArrayに検証結果を保持しているため、textを空文字列、errorStringを空文字列にした状態でTextInputの検証が行われても、「既にerrorStringに検証エラー文字列を設定済」と判断されてしまう。

検証エラーをクリアするには、対象のValidatorに対して dispatchEvent(new ValidationResultEvent(ValidationResultEvent.VALID)) を行う。
あまりスマートなやり方ではないが、ValidationResultEvent.VALIDイベントの通知の際にerrorObjectArrayはクリアされるからだ。
(もっとスマートなやり方をご存知の方は教えてください…)