[英]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.