1

から次のメソッドを参照していますBindingResult

BindingResult.html#resolveMessageCodes(java.lang.String, java.lang.String)

エラーコードとメッセージコードの違いを理解しようとしています。誰かが例を提供してもらえますか?特に、特定のエラー コードに対して複数のメッセージ コードが存在する理由を説明する例を教えてください。

4

1 に答える 1

1

Web アプリケーションは国際化されているため、オブジェクトを拒否してメッセージを表示したい場合、言語に関係なく同じように表示されるため、ハードコーディングされたテキストは使用しません。

代わりに、後でサーバーがバンドルから適切なメッセージを取得するためのキーとしてエラー コードを指定します (エラー コードは、適切なメッセージ テキストを見つける必要があるメソッドの観点からのメッセージ コードです)。

Spring が (実装に基づいて) いくつかのメッセージ コードを追加するため、エラー コードはより多くのメッセージ コードに解決されます。以下は、Spring ドキュメントのスニペットです。

[...] 登録するエラー コードは、使用される MessageCodesResolver によって決まります。デフォルトでは、DefaultMessageCodesResolver が使用されます。たとえば、指定したコードでメッセージを登録するだけでなく、reject メソッドに渡したフィールド名を含むメッセージも登録します。したがって、rejectValue("age", "to.darn.old") を使用してフィールドを拒否する場合、too.darn.old コードとは別に、Spring は too.darn.old.age と too.darn.old も登録します。 .age.int (したがって、最初のフィールドにはフィールド名が含まれ、2 番目のフィールドにはフィールドの型が含まれます); これは、開発者がエラー メッセージなどをターゲットにする際に便利なように行われます。[...]

最後のステートメントは、より多くのメッセージ コードが存在する理由です。ユーザーに表示されるメッセージを制御するために、一般的なもの (たとえば、「値が必要です」) から、コンテキストが与えられたより具体的なもの (たとえば、「値が必要です」) まであります。フィールド XXX に必要です」)。

javadocDefaultMessageCodesResolverはそれをさらに説明し、例を示します:

たとえば、コード「typeMismatch」、オブジェクト名「user」、フィールド「age」の場合:

  1. 「typeMismatch.user.age」を試してください
  2. 「typeMismatch.age」を試してください
  3. 「typeMismatch.int」を試してください
  4. 「typeMismatch」を試してください

したがって、この解決アルゴリズムを利用して、たとえば、「required」や「typeMismatch」などのバインディング エラーの特定のメッセージを表示できます。

オブジェクト + フィールド レベル (「年齢」フィールド、ただし「ユーザー」のみ)。フィールド レベル (オブジェクト名に関係なく、すべての「年齢」フィールド)。または一般的なレベル (すべてのフィールド、任意のオブジェクト)。

于 2012-10-28T17:35:23.243 に答える