3

我正在尝试构建一个 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>
4

2 回答 2

4

最简单的方法(如快速浏览文档所揭示的那样)是将其AnnotationValidationInterceptor放入堆栈中,并使用@org.apache.struts2.interceptor.validation.SkipValidation

于 2013-05-14T19:37:07.877 回答
4

以下是您可以如何绕过特定操作的验证。(我假设您不想为整个应用程序禁用拦截器。)

<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过。不过你可以试一试。 更新:以上工作。:)

但是,execute()您可以将其重命名为input()(已在排除列表中)并添加method="input"到您的<action>. 文件上传也有点道理。

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

public class MyAction extends ActionSupport {
  ...
  @Override
  public void validate() {
    setFieldErrors(null);
  }
}
于 2013-05-14T19:57:32.423 回答