1

Struts 2アプリケーションでは、すべてののプロジェクトアクションの前にロジックを実行します。ロジックがフィールドエラーを生成するか、アクションを続行します。Struts 2すべてのアクションの前にバリデーションを実行する方法

私はこの場合のインターセプターを開発しようとしました。我々は、フィールドのエラーを設定するaddFieldError(fieldName, object);を呼び出して、私は私が迎撃にフィールドエラーを追加する方法がわからないバリで

しかし、ここでは私の問題です。それができない場合


、私はすべての私の行動(私は@Validationsを使用し、私はの上に私のバリデータをコピーしない方法を探しています前に実行されるバリデータを使用することができるなら、私に知らせてくださいすべての私のアクション!)

+0

検証は*アクション*の前に常に*実行されます。場合によっては、そのような検証が必要ない場合や、検証がトランザクションで実行されないため、上位レイヤへの移行が*プレゼンテーション*レイヤを意味する場合があります。 –

答えて

3

アクション呼び出しをあなたのインターセプターのValidationAwareにキャストすることで、フィールド(およびアクション)エラーを追加できます。 は明らかにあなたの行動は、実際にValidationAwareインタフェースを実装する必要がありますが、それはprobalyん(あなたのアクションがActionSupportを拡張例えば場合ActionSupportValidationAwareを実装しているため、それはまたValidationAwareです):

public String intercept(ActionInvocation invocation) throws Exception { 
    Object action = invocation.getAction(); 
    if (action instanceof ValidationAware) { 
     ValidationAware validationAware = (ValidationAware) action; 
     validationAware.addFieldError("field", "field error"); 
     validationAware.addActionMessage("action message"); 
     validationAware.addActionError("action error"); 
    } 
    return invocation.invoke(); 
} 
1

あなたは、単にそれをキャストアクションにaddFieldError()を呼び出すことができますValidationAwareインターフェースへ:

public String intercept(ActionInvocation invocation) throws Exception { 
    ActionContext invocationContext = invocation.getInvocationContext(); 
    Object action = invocation.getAction(); 

    if (action instanceof ValidationAware) { 
     ValidationAware va = (ValidationAware) action; 
     va.addFieldError("field", "message"); 
    } 

    .... 
} 
関連する問題