Struts类型转换器

来源:互联网 发布:矩阵的零次幂 编辑:程序博客网 时间:2024/06/16 12:22

Strut2在接收表单转交过来的参数时,会根据表单元素名称自动将Action中对应的属性,那么属性的数据类型显然有多种,譬如:int、double以及Date,但是表单提交过来的数据通通是字符串,意味着Struts2默认给我们提供了各种类型转换。
在实际开发中,往往需要自定义类型转换,来完成实际的功能或者补充默认转换所不能实现的需求。
局部类型转换:
定义一个类继承“DefaultTypeConverter”,然后重写“public Object convertValue(Object value,Class toType”注意:1、value是字符串数组2、如果要转换类型是是Date,需要手动导入“java.util.Date”包
定义转换代码:

public Object convertValue(Object value,Class toType){String source=((String[] value)[0];if(toType==Date.class){try{SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");return sdf.parse(source);}catch(ParseException e){e.printStackTrace();}}

定义好转换器之后,需要在Action同目录下创建与该Action对应的配置文件,“Action类名-conversion.properties”
范例:LoginAction-conversion.properties代码:
birthday=com.converter.DateConverter
以上代码只能转换指定Action中的数据类型,农场需要定义全局的类型转换器。
全局类型转换器:
全局类型转换器与局部类型转换器仅仅只是配置文件不同,全局类型转换的配置文件需“xwork-conversion.properties”命名,然后需要将此文件放入“src”根目录
代码为:java.util.Date=com.converter.DateConverter
转换器中异常消息的处理:
范例:修改转换器代码

public Object convertValue(Object value,Class toType){String source = ((String[] value)[0];if(toType==Date.class){try{SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");if(!source.matches("\\d{4}-\\d{2}-\\d{2}")){throw new TypeConversionException();}return sdf.parse(source);}catch(ParseException e){e.printStackTrace();}

范例:修改Action类的继承关系

public class LoginAction extends ActionSupport{...}

范例:修改表单页面,加入错误消息提示
${fieldErrors.birthday[0]}