关于struts fileupload拦截器的流程整理和一些要点

来源:互联网 发布:sqlserver seq 编辑:程序博客网 时间:2024/05/19 09:15

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

1.在fileupload拦截器配置后,要增加defaultStack(顺序不能倒,因为需要现在通过fileupload检查,后续defaultstack中判断是否有问题),因为如果fileupload拦截器发现上传文件不符合条件时,会在action实例(需继承actionsupport,第2点)validation.addFieldError(inputName, errMsg);,而后续检查fielderror,要靠defaultStack里的workflow(第2点)

  1. <interceptor-ref name="fileUpload">  
  2. <param name="allowedTypes">  
  3. image/bmp,image/png,image/gif,image/jpeg  
  4. </param>  
  5. <param name="maxinumSize">3</param>  
  6. </interceptor-ref>  
  7. <interceptor-ref name="defaultStack"/>  

2.action要实现actionsupport,defaultStack里的workflow会调用action的hasErrors方法来判断文件有错误,然后返回一般的“INPUT”逻辑视图,然后就返回了,不往下跑拦截器栈了,当然也就进不去action

  1. <interceptor-stack name="defaultStack">  
  2.     <interceptor-ref name="exception"/>  
  3.     <interceptor-ref name="alias"/>  
  4.     <interceptor-ref name="servletConfig"/>  
  5.     <interceptor-ref name="i18n"/>  
  6.     <interceptor-ref name="prepare"/>  
  7.     <interceptor-ref name="chain"/>  
  8.     <interceptor-ref name="debugging"/>  
  9.     <interceptor-ref name="scopedModelDriven"/>  
  10.     <interceptor-ref name="modelDriven"/>  
  11.     <interceptor-ref name="fileUpload"/>  
  12.     <interceptor-ref name="checkbox"/>  
  13.     <interceptor-ref name="multiselect"/>  
  14.     <interceptor-ref name="staticParams"/>  
  15.     <interceptor-ref name="actionMappingParams"/>  
  16.     <interceptor-ref name="params">  
  17.         <param name="excludeParams">dojo\..*,^struts\..*</param>  
  18.     </interceptor-ref>  
  19.     <interceptor-ref name="conversionError"/>  
  20.     <interceptor-ref name="validation">  
  21.         <param name="excludeMethods">input,back,cancel,browse</param>  
  22.     </interceptor-ref>  
  23.     <interceptor-ref name="workflow">  
  24.         <param name="excludeMethods">input,back,cancel,browse</param>  
  25.     </interceptor-ref>  
  26. </interceptor-stack> 

3.action结果要配置input对应的资源

<result name="input">uploadError.jsp</result>


综上

0 0