[struts2+tiles] 为表单设定错误时显示的tiles defenition
环境: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