环境:Struts 2.3.20 + Apache tiles 2.0.6

问题:上传档案的表单有时候没有其他资料,form里只有 type=file的textfield 和一个 s:submit
   因为没特别写validation (例如xml或action内验证),就没去设定这个 upload action的mapping

   但检查 error log 时发现有这样的错误讯息:

(FileUploadInterceptor  ) 不支援上传的档案类型。
   (BasicTilesContainer    ) Unable to find the definition 'action_upload'

 

原因:看到这才想到就算没特别追加检核,FileUploadInterceptor 还是会运作,最少也有以下3种常见的错误 return

 

 

struts.messages.error.content.type.not.allowed (档案类型不符合设定)
struts.messages.error.file.too.large (档案大小超过限制)
struts.messages.error.uploading (档案上传发生错误)

   所以还是可能会出现需要转回输入页面的情况,如果没设定转回的 tiles defenition,使用者就会看见系统发生错误的画面

解法所以还是在 tiles.xml 里为每个有档案上传的表单都设定一个对应的 defenition吧,不论那个 action 本身有没有其他validation

 

---------------------------------------------------
2016-04-27补充,就算表单没有验证 (validation) 也没有档案上传,还是有可能出现错误

2016-04-27 17:58:15,407  WARN (CommonsLogger.java:60) - could not find @TilesDefinition for action: {}
2016-04-27 17:58:15,413  WARN (BasicTilesContainer.java:623) - Unable to find the definition 'module_save'

interceptor里的型态转换错误,例如数字或日期栏位输入文字被拦截就会造成这样

为了避免使用者看到ERROR,只要有用到非字串型态的表单都要设定mapping

相关文章