在struts中一般的action都继承ActionSupport这个类可以重写public void validate()来进行数据校验对应提示信息来说一般有两个比较常用的方法就是thisaddFieldError(field nameerror message) 和 thisaddActionError(error message)两个方法
由于在ActionSupport这个类实现了ValidationAware接口接口里面声明了这两个方法
public void addActionError(String anErrorMessage) {
validationAwareaddActionError(anErrorMessage);
}
public void addActionMessage(String aMessage) {
validationAwareaddActionMessage(aMessage);
}
而ValidationAwareSupport实现了ValidationAware接口通过查看ValidationAwareSupport源码中的两个错误提示方法
private Collection actionErrors
private Map fieldErrors
public synchronized void addFieldError(String fieldName String errorMessage) {
final Map errors = internalGetFieldErrors();
List thisFieldErrors = (List) errorsget(fieldName);
if (thisFieldErrors == null) {
thisFieldErrors = new ArrayList();
errorsput(fieldName thisFieldErrors);
}
thisFieldErrorsadd(errorMessage);
}
public synchronized void addActionError(String anErrorMessage) {
internalGetActionErrors()add(anErrorMessage);
}
注由于fielderrors级别是Map类型所以thisaddFieldError(field nameerror message) 而actionerror级别是Collection级别所以thisaddActionError(error message)
在实际的项目开发应用中如果同时用到field和action错误级别的时候在jsp页面中的表单有用到struts的标签来实现的话就有可能对于同一个表单既有filed级别error提示又有action级别的error提示这时可以根据项目的实际需要来取捨但是如果两个都要同时存在的时候只显示action级别的error而不显示field级别的action由于struts标签默认就是显示field级别的error所以要修改模板加入theme=simple即可这时struts表单那标签默认的显示field错误提示失效使用这个模板的好处还可以和普通的html一样随便设计版面例如<sform action=RegisterActiontheme=simple >
PS要显示action级别的错误提示需要在jsp页面中的表单里面加入<sactionerror/>