Struts 2 如何 运行 在每个动作之前进行验证

Struts 2 how to run a validation before every action

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

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

但这是我的问题:

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


如果那不可能,请让我知道我是否可以在所有操作之前使用 运行s 的验证器(我使用 @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();
}

您可以调用 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");
    }

    ....
}