0

WebObjects アプリでフィールド検証を行う良い方法を見つけようとしています。テキストフィールドがあり、それに数値フォーマッタを結び付けると、デフォルトの動作は、ユーザーが有効な数値を入力した場合に数値を解析することであるか、またはユーザーが無効な数値を入力した場合、単にユーザーが入力した値を無視します。保存メソッドまたはアクション メソッドで検証を行うことができません。アクション メソッドに到達するまでに、WO は数値以外の入力を既に無視しているためです。無効な入力を単に無視するのではなく、無効な入力をユーザーに警告できるように、WebObjects アプリでユーザー入力を検証する標準/推奨される方法はありますか?

このページ: http://en.wikibooks.org/wiki/WebObjects/EOF/Using_EOF/Validationは、WO と EOF には「信じられないほど多くの検証メカニズム」があると主張し、それを防ぐ組み込みの方法があることをほのめかしています。ユーザーは不適切なデータを入力することはできませんが、それを行う方法のドキュメントや例を見つけることができませんでした (実際に組み込みの方法がある場合)。不適切なデータを防ぐためにカスタムの JavaScript バリデーターを考え出すのは悪夢のように思えます。バックエンドのフォーマッター/パーサーが処理するのと同じエッジ ケースをすべて JS に認識させて処理させる方法を見つけることです。WO に、フォーマッタのエッジ ケースを JS 検証に伝達する組み込みの方法が本当にあるとしたら、それは素晴らしいことです。

上記のリンクは、WOComponent に「EO またはフォーマッタが割り当て中に検証に失敗した場合」に呼び出される validationFailedWithException メソッドがあることも示していますが、上記の数値以外の例でフォーマッタを検証に失敗させるにはどうすればよいですか? 数値以外が入力された場合、フォーマッタが parse メソッドで例外をスローするように試みましたが、その例外は validationFailedWithException メソッドに渡されません。validationFailedWithException() への呼び出しをトリガーするフォーマッターで例外をトリガーする方法を知っている人はいますか? そして、それは最善の/推奨される方法ですか? 誰かがより良い方法を知っていますか?

4

1 に答える 1

1

フォーマットエラーごとに validationFailedWithException が呼び出されていると確信しています。ParseException をラップする NSValidationException を受け取る必要があります。メソッドは通常、バインディングを含むコンポーネントで呼び出されます。キャレット (^) バインディングではスキップされる場合があります。

すべての標準数値フォーマッタは、すでに ParseException をスローしています (Format.parse(String) を参照)。

WebObjects での検証処理は非常に複雑になる可能性があり、実際にはニーズによって異なります。しかし、JavaScript や Ajax を念頭に置いて設計されていません。Wonder の新しいアプローチには、クライアント側が組み込まれている可能性がありますが、私はその経験がありません。

通常の検証シーケンスは次のとおりです。

  • 必要に応じて、フォーマッタを使用して入力をターゲット タイプに変換します
  • ターゲット オブジェクトで validateAttributeName メソッドを呼び出します。ここで、AttributeName は値を受け取る属性名です。

このシーケンスで何かが失敗すると、validationFailedWithException が呼び出されます。

エンタープライズ オブジェクトの保存中に、オブジェクトに対して「validateFor...」が呼び出されます。この時点での例外は、アクション メソッドでキャッチする必要があります。

したがって、検証エラーを処理するには 2 つのポイントがあります。「構文」エラーは、validationFailedWithException で処理する必要があります。この時点で、有効な入力が得られます。アクション メソッドまたは validateFor... (例: validateForSave) で、これらまたはそれ以上のオブジェクト構造を手動でさらにチェックすることができます。

于 2012-06-26T11:00:19.993 に答える