为Struts2的类型转换错误配置自定义的错误信息

继承了ActionSupport的自定义action类可以重写父类提供的validate校验方法,对一些字段进行校验。其原理是下面的拦截器:

<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

validate方法默认对action类中的所有方法在其执行之前进行校验,可以使用注解的方式排除某个方法,如下:

        @SkipValidation
	public String save() {
		return "success";
	}

也可以自定义拦截方法,命名方式为validate+要拦截的方法名,构成拦截方法,如下:(只验证名为save的方法)

public void validateSave() {
		System.out.println("validate");
		System.out.println(password);
		if(!this.getUserName().matches("[a-zA-Z]{4,9}")) {
			this.addFieldError("userName", "用户名必须是4到9位大小写字母");
		}
		if(!((this.getPassword()+"").matches("\\d{0,1}"))){
			this.addFieldError("password", "密码必须是0-1位数字");
		}
}

只要验证不通过,即值栈中fieldErrors中有值,拦截器就不会放行,返回“input”,struts.xml中配置的方法也不会得到执行。

当然,本文的重点不是这些。在validation拦截器执行之前,还有一些赋值的拦截器,如:


<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

在这些拦截器执行时,可能发生类型转换错误,如int类型越界,字符串转换为int发生转换错误。此时,struts2提供有默认的提示信息,在com/opensymphony/xwork2/xwork-messages.properties文件中有定义:

xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".

开发中我们可能需要自定义文件来替换此提示信息,方法如下:

一、全局配置

       在src根目录下建立message.properties,内容为:

xwork.default.invalid.fieldvalue=错误信息 (可以用{0}来替换相应的错误参数,如上)

       在struts.xml中设置常量,内容如下:

下面的name可以在default.properties中找到
<constant name="struts.custom.i18n.resources" value="message"/>   

二、局部配置

       在Action类的包下建立文件 xxx.properties ,(xxx)与action类名相同,内容为:

值随便写
invalid.fieldvalue.password=\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6570\u5B57
如果action中还有类对象,如下
invalid.fieldvalue.user.password=\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6570\u5B57

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值