由于在ActionSupport這個類實現(xiàn)了ValidationAware接口,接口里面聲明了這兩個方法:
1
public void addActionError(String anErrorMessage) {
2
validationAware.addActionError(anErrorMessage);
3
}
4
5
public void addActionMessage(String aMessage) {
6
validationAware.addActionMessage(aMessage);
7
}

2

3

4

5

6

7

而ValidationAwareSupport實現(xiàn)了ValidationAware接口,通過查看ValidationAwareSupport源碼中的兩個錯誤提示方法:
private Collection actionErrors;
private Map fieldErrors;
1
public synchronized void addFieldError(String fieldName, String errorMessage) {
2
final Map errors = internalGetFieldErrors();
3
List thisFieldErrors = (List) errors.get(fieldName);
4
5
if (thisFieldErrors == null) {
6
thisFieldErrors = new ArrayList();
7
errors.put(fieldName, thisFieldErrors);
8
}
9
10
thisFieldErrors.add(errorMessage);
11
}

2

3

4

5

6

7

8

9

10

11

1
public synchronized void addActionError(String anErrorMessage) {
2
internalGetActionErrors().add(anErrorMessage);
3
}
4

2

3

4

注:由于fielderrors級別是Map類型,所以this.addFieldError("field name","error message"); ,而actionerror級別是Collection級別,所以this.addActionError("error message");
在實際的項目開發(fā)應用中如果同時用到field和action錯誤級別的時候,在jsp頁面中的表單有用到struts2的標簽來實現(xiàn)的話,就有可能對于同一個表單,既有filed級別error提示又有action級別的error提示,這時,可以根據(jù)項目的實際需要來取舍,但是如果兩個都要同時存在的時候,只顯示action級別的error,而不顯示field級別的action,由于struts2標簽默認就是顯示field級別的error,所以要修改模板,加入theme="simple"即可,這時struts2表單那標簽默認的顯示field錯誤提示失效,使用這個模板的好處還可以和普通的html一樣隨便設計版面。例如:<s:form action="RegisterAction"theme="simple" >
PS:要顯示action級別的錯誤提示,需要在jsp頁面中的表單里面加入<s:actionerror/>。
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創(chuàng)。如果需要轉載,務必注明作者和文章的詳細出處地址,否則不允許轉載,多謝合作!