2

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

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

但这是我的问题:

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


如果这是不可能的,请让我知道我是否可以使用在我所有操作之前运行的验证器(我使用@Validations,并且我正在寻找一种不在我所有操作之上复制我的验证器的方法!)

4

2 回答 2

4

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