关于怎么配置这个拦截器的资料很多,但是也就只是停留在配置拦截器层面,如果照着做,一般也是失败的。因为除了配置拦截器外,还有其他工作需要进行。
1.在fileupload拦截器配置后,要增加defaultStack(顺序不能倒,因为需要现在通过fileupload检查,后续defaultstack中判断是否有问题),因为如果fileupload拦截器发现上传文件不符合条件时,会在action实例(需继承actionsupport,第2点)validation.addFieldError(inputName, errMsg);,而后续检查fielderror,要靠defaultStack里的workflow(第2点)
-
<interceptor-ref name="fileUpload">
-
<param name="allowedTypes">
-
image/bmp,image/png,image/gif,image/jpeg
-
</param>
-
<param name="maxinumSize">3</param>
-
</interceptor-ref>
-
<interceptor-ref name="defaultStack"/>
2.action要实现actionsupport,defaultStack里的workflow会调用action的hasErrors方法来判断文件有错误,然后返回一般的“INPUT”逻辑视图,然后就返回了,不往下跑拦截器栈了,当然也就进不去action
-
<interceptor-stack name="defaultStack">
-
<interceptor-ref name="exception"/>
-
<interceptor-ref name="alias"/>
-
<interceptor-ref name="servletConfig"/>
-
<interceptor-ref name="i18n"/>
-
<interceptor-ref name="prepare"/>
-
<interceptor-ref name="chain"/>
-
<interceptor-ref name="debugging"/>
-
<interceptor-ref name="scopedModelDriven"/>
-
<interceptor-ref name="modelDriven"/>
-
<interceptor-ref name="fileUpload"/>
-
<interceptor-ref name="checkbox"/>
-
<interceptor-ref name="multiselect"/>
-
<interceptor-ref name="staticParams"/>
-
<interceptor-ref name="actionMappingParams"/>
-
<interceptor-ref name="params">
-
<param name="excludeParams">dojo\..*,^struts\..*</param>
-
</interceptor-ref>
-
<interceptor-ref name="conversionError"/>
-
<interceptor-ref name="validation">
-
<param name="excludeMethods">input,back,cancel,browse</param>
-
</interceptor-ref>
-
<interceptor-ref name="workflow">
-
<param name="excludeMethods">input,back,cancel,browse</param>
-
</interceptor-ref>
-
</interceptor-stack>
3.action结果要配置input对应的资源
<result name="input">uploadError.jsp</result>
综上