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

时间:2016-07-04 15:21:21

标签: java validation struts2 struts2-interceptors interceptorstack

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

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

但这是我的问题:

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

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

2 个答案:

答案 0 :(得分:3)

您可以通过将动作调用强制转换为拦截器中的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();
}

答案 1 :(得分: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");
    }

    ....
}