2

Struts 2 アプリケーションで、すべてのプロジェクト アクションの前にロジックを実行したいと考えています。ロジックによってフィールド エラーが生成されるか、アクションが続行されます。

この場合のインターセプターを開発しようとしました。

しかし、ここに私の問題があります:

バリデーターでフィールドエラーを設定するために呼び出しaddFieldError(fieldName, object);ますが、インターセプターでフィールドエラーを追加する方法がわかりません。


それが不可能な場合は、すべてのアクションの前に実行されるバリデーターを使用できるかどうか教えてください (私は を使用@Validationsしており、すべてのアクションの上にバリデーターをコピーしない方法を探しています!)

4

2 に答える 2

4

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

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();
}
于 2016-07-04T15:48:27.653 に答える
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");
    }

    ....
}
于 2016-07-04T15:50:05.357 に答える