兩種驗證機制的執行順序
先執行validation.xml,后執行Action內部的validate()方法。
ActionSupport類對ActionError和FieldError的實現細節
在ActionAware接口中聲明的
ActionError,ActionMessage: Collection<String>
FieldError: Map<String,List<String>>
ActionSupport組合了一個實現了ValidationAware的ValidationAwareSupport來繼承ValidationAware接口:
ValidationAwareSupport類內部聲明了三個私有變量,
其中
actionMessage = new ArrayList<String>();
actionError = new ArrayList<String>();
fieldErrors = new LinkedHashMap<String, List<String>>();
FieldErrors需要注意的一點
我們往FieldErrors中添加錯誤的時候,需要調用addFieldError(),而不應該調用getFieldErrors().put()函數.
這兩個方法看起來是一樣的,其實不然。
getFieldErrors()在實現的時候返回的是fieldErrors的一個可寫副本,修改這個副本不會真正將錯誤傳入fieldErrors中去。addFieldError()才是真正向fieldErrors中添加內容。