2016-06-13 53 views
3

私はSpring 4 APIを読んでおり、FieldErrorObjectErrorとグローバルエラーの違いをすべて理解しようとしています。これらはすべてBindingResultのコンテキスト内です。私は、がObjectErrorを返して以来、グローバルエラーがObjectErrorの別名であると推測しています。FieldError対ObjectError対グローバルエラー

コンテキストは、フォームの検証後にエラーメッセージを表示するだけでなく、this accepted answerのようにinstanceofチェックを回避する方法を知りたいという文脈です。 FieldErrorを使用して、オブジェクトエラーを無視することはできますか?私がFieldErrorを記録しただけでは何が失われますか?

私はいくつかのシナリオを試しましたが、その区別はまだありません。その間にいくつかの情報源を見ていきます。

答えて

1

getGlobalError()はObjectErrorを返すので、グローバルエラーはObjectErrors の別の名前だと推測しています。

実際

「グローバルエラーは、」FieldErrorのインスタンスではありません任意のObjectErrorは私だけFieldErrorsをログインした場合、私は何をしないことになるsource

getGlobalErrors()

を見ているのですか?

任意ObjectErrorこのコードは、「グローバルエラー」として登録されています。 BindingResult.reject(errorCode, errorArgs, defaultMessage)に電話してください。

rejectValue(field, errorCode, errorArgs, defaultMessage)については、javadocも参照してください。通常、エラーは、オブジェクト自体ではなく、検証/バインドされたオブジェクトのフィールド(例えば、その属性がSpringフォームタグのmodelAttributeタグと一致するモデル値)に対して登録されます。続き

がグローバルエラーを作成する方法のカップルです:

  1. は、ルートフォームオブジェクトではなくSpring Validator implementation経由で検証されていますネストされたオブジェクトだと仮定すると、あなたは、「グローバルエラーを」追加することができます(中指定されたバインドされたルートオブジェクトのコンテキスト)を、フィールド名パラメータrejectValueとしてnullを渡して返します。ただし、検証対象のオブジェクトがネストされたオブジェクトの場合は、FieldErrorがネストされたオブジェクトフィールドに対して登録されます。オブジェクトErrorsオブジェクトのnestedPath( "ネストされたオブジェクトグラフ")プロパティは、一般的なものがObjectErrorか特定のものかFieldErrorが追加されているかどうかが重要です。

  2. JSR 303制約注釈をクラスレベルで適用します。 exampleを参照してください。ここでは、モデルオブジェクトがデータストア内に存在するかどうかがチェックされます。

    <spring-ext:overflowErrors name="newModelObject"> 
         <div class="row"> 
          <div class="large-12 columns"> 
           <div class="alert panel"> 
            <c:if test="${overflowErrors.size()>0}"> 
             <p>There are multiple errors with your entry.</p> 
             <c:forEach var="error" items="${overflowErrors}"> 
              ${fn:toUpperCase(fn:substring(error.field, 0, 1))}${fn:toLowerCase(
              fn:substring(error.field, 1,fn:length(error.field)))}: 
              <b><spring:message message="${error}" /></b> 
              <br/> 
             </c:forEach> 
            </c:if> 
            <c:forEach var="error" items="${globalErrors}"> 
             <b><spring:message message="${error}" /></b> 
             <br/> 
            </c:forEach> 
           </div> 
          </div> 
         </div> 
        </spring-ext:overflowErrors> 
    

    、ビューのグローバルフィールドエラーの両方を含むこのタグを表示する:ここ

は、フィールドレベルのエラー対グローバルを参照する例です
関連する問題