关于怎么配置这个拦截器的资料很多,但是也就只是停留在配置拦截器层面,如果照着做,一般也是失败的。因为除了配置拦截器外,还有其他工作需要进行。
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>
综上