filederror和actionerror

Struts2中action和field级别错误处理 

          在 struts2中,一般的action都继承ActionSupport这个类,可以重写public void validate()来进行数据校验,对应提示信息来说一般有两个比较常用的方法就是this.addFieldError("field name","error message"); 和 this.addActionError("error message");两个方法。 由于在ActionSupport这个类实现了ValidationAware接口,接口里面声明了这两个方法:
1public void addActionError(String anErrorMessage) {
2        validationAware.addActionError(anErrorMessage);
3    }
4
5    public void addActionMessage(String aMessage) {
6        validationAware.addActionMessage(aMessage);
7    } 

    而ValidationAwareSupport实现了ValidationAware接口,通过查看ValidationAwareSupport源码中的两个错误提示方法:
    private Collection actionErrors;
    private Map fieldErrors;
 1public 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    } 

1public synchronized void addActionError(String anErrorMessage) {
2        internalGetActionErrors().add(anErrorMessage);
3    }
    注:由于fielderrors级别是Map类型,所以this.addFieldError("field name","error message"); ,而actionerror级别是Collection级别,所以this.addActionError("error message");
    在实际的项目开发应用中如果同时用到field和action错误级别的时候,在jsp页面中的表单有用到struts2的标签来实现的话,就有可能对于同一个表单,既有filed级别error提示又有action级别的error提示,这时,可以根据项目的实际需要来取舍,但是如果两个都要同时存在的时候,只显示action级别的error,而不显示field级别的action,由于struts2标签默认就是显示field级别的error,所以要修改模板,加入theme="simple"即可,这时struts2表单那标签默认的显示field错误提示失效,使用这个模板的好处还可以和普通的html一样随便设计版面。例如:<s:form action="RegisterAction"theme="simple" > 
    PS:要显示action级别的错误提示,需要在jsp页面中的表单里面加入<s:actionerror/>.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值