繁体   English   中英

如何禁用Struts Validation Interceptor?

[英]How to disable Struts Validation Interceptor?

我正在尝试构建一个javascript / ajax上传器,它将表单/文件上传提交给一个动作。 但是,在提交表单时,验证拦截器会阻止我的操作由于某种原因而运行,并返回“输入”作为结果。 我不知道为什么,但我希望它停下来。

如何仅为MyAction.execute()禁用验证拦截器? 这是来自struts.xml的拦截器代码:

    <interceptors>
        <interceptor name="appInit"
            class="com.example.myApp.interceptors.AppInit">
        </interceptor>
        <interceptor-stack name="appDefault">
         <interceptor-ref name="servletConfig"/>   
         <interceptor-ref name="appInit" />  
          <interceptor-ref name="defaultStack">
             <param name="exception.logEnabled">true</param>
             <param name="exception.logLevel">ERROR</param>
             <param name="params.excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*,submit</param>
          </interceptor-ref>
        </interceptor-stack>
  </interceptors>

最简单的方法( 快速浏览文档显示)是将AnnotationValidationInterceptor放在堆栈中,并使用@org.apache.struts2.interceptor.validation.SkipValidation注释您的方法。

以下是您可以绕过特定Action的验证的方法。 (我假设您不想为整个应用程序禁用Interceptor。)

<action name="MyAction" class="pkg.path.to.MyAction">
  <interceptor-ref name="appDefault">
    <param name="validation.excludeMethods">execute</param>
    <param name="workflow.excludeMethods">execute</param>
  </interceptor-ref>
  <result>Success.jsp</result>
</action>

验证拦截器仅记录错误。 工作流拦截器检查是否记录了任何验证错误,如果是,则重定向到映射到input结果代码的视图。

编辑:
我认为嵌套堆栈会导致参数覆盖的语法出现问题,我之前从未尝试过<stack-name>.<interceptor-name>.excludeMethods 你可以尝试一下。 更新:以上工作。 :)

但是,您可以将其重命名为input() (已在排除列表中),并将method="input"添加到<action> ,而不是尝试排除execute() 对文件上传也有意义。

您也可以为您的Action覆盖validate() (尽管我个人更喜欢通过struts.xml以声明方式执行)

public class MyAction extends ActionSupport {
  ...
  @Override
  public void validate() {
    setFieldErrors(null);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM