在Struts 2应用程序中,我想在所有项目操作之前运行逻辑。逻辑将产生字段错误或让操作继续。

我试图为这种情况开发一种拦截器。

但是这是我的问题:

在验证器中,我们调用addFieldError(fieldName, object);设置字段错误,但是我不知道如何在拦截器中添加字段错误。



如果无法做到这一点,请告诉我是否可以使用在所有操作之前运行的验证程序(我使用@Validations,我正在寻找一种方法,不要在所有操作之上复制我的验证程序!)

最佳答案

您可以通过将动作调用强制转换为拦截器中的ValidationAware来添加字段(和动作)错误。
显然,您的操作必须实际实现ValidationAware接口,但是它确实可以实现(例如,如果您的操作扩展了ActionSupport,那么它也是ValidationAware,因为ActionSupport实现了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();
}

10-06 11:27