【问题标题】:Struts 2 how to run a validation before every actionStruts 2 如何在每个动作之前运行验证
【发布时间】:2016-11-06 09:09:57
【问题描述】:

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

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

但这是我的问题:

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


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

【问题讨论】:

  • 验证总是在任何操作之前运行。有时您不需要此类验证或验证不在事务中执行,因此移至更高层意味着 presentation 层。

标签: java validation struts2 struts2-interceptors interceptorstack


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以在操作上调用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");
        }
    
        ....
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多