美文网首页
Struts2学习 一 自定义类型转换器

Struts2学习 一 自定义类型转换器

作者: Mon7ey | 来源:发表于2018-02-28 16:46 被阅读10次

    struts2中,使用Jsp提交表单数据时,struts2会自动将表单中的数据封装,并复制给对应Action中的属性.

    struts2会自动转换只支持基本数据类型和 "yyyy-MM-dd"形式的日期类型.

    如果用户输入的日期类型.不是struts2可识别的格式,就会报错.

    在项目中,经常会需要用户输入各种类型的时间.这种情况下我们就需要用到"自定义类型转换器".

    Struts2 类型转换接口

    接口实现关系

    TypeConverter接口定义了方法.DefaultTypeConverter是该接口的默认实现.StrutsTypeConverter继承了DefaultTypeConverter类.

    自定义类型转换分为 : 局部类型转换 和 全局类型转换

    Action实例
    public class UserAction extends ActionSupport {
    
        private User user;
    
        private Date birth;
    
        public Date getBirth() {
            return birth;
        }
    
        public void setBirth(Date birth) {
            this.birth = birth;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
        public String register() {
            System.out.println(user.getName());
            System.out.println(user.getPwd());
            System.out.println(user.getAge());
            System.out.println(user.getBirth());
            return "success";
        }
    }
    

    局部类型转换

    1. 我们在自定义类型转换器时,需要继承StrutsTypeConverter类.重写converterFromString 和 convertToString方法
    public class MyConverter extends StrutsTypeConverter{
    
        /**
         * 把String转换为指定对象
         * @param context 当前上下文环境
         * @param values jsp表单提交的字符串的值
         * @param toClass 要转换的目标类型
         */
        @Override
        public Object convertFromString(Map context, String[] values, Class toClass) {
            
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                
                return sdf.parse(values[0]);
            } catch (ParseException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        
        /**
         * 将指定类型转换String
         */
        @Override
        public String convertToString(Map context, Object o) {
            // TODO Auto-generated method stub
            return null;
        }
    
    }2. 注册转换器
    

    在需要进行类型转换的Action目录(包)下,创建一个新的properties文件.
    文件名按照指定规则指定.

    文件的命名规则为 : ActionClassName-conversion.properties

    举例 :
    如果是UserAction中有字段需要进行类型转换.
    配置文件命名为:UserAtion-conversion.properties

    1. 声明配置文件内容

    对属性成员进行类型转换时 :

    birth=com.se7en.struts02.util.MyConverter(自定义转换器类的全路径)

    对属性成员内部变量进行类型转换时 :

    user.birth=com.se7en.struts02.util.MyConverter(自定义转换器类的全路径)

    全局类型转换

    全局类型转换器的定义方法和局部类型转换器相同. 同样是继承StrutsTypeConverter类.实现converterFromString 和 converterToString方法

    不同点是配置文件,全局类型转换器的配置文件的命名和位置都与局部类型转换器不同.

    配置文件名称 : xwork-conversion.properties

    全局类型转换器的配置文件必须放在 src 目录下!!!
    全局类型转换器的配置文件必须放在 src 目录下!!!
    全局类型转换器的配置文件必须放在 src 目录下!!!

    内容 :

    java.util.Date=com.se7en.struts02.util.MyConverter

    完整的类型转换
    public class MyConverter extends StrutsTypeConverter{
    
        /**
         * 把String转换为指定对象
         * @param context 当前上下文环境
         * @param values jsp表单提交的字符串的值
         * @param toClass 要转换的目标类型
         */
        @Override
        public Object convertFromString(Map context, String[] values, Class toClass) {
            
            // 内容不能为空
            if (values == null || values.length == 0) {
                return null;
            }
            
            // 判断类型必须为Date
            if (Date.class != toClass) {
                return null;
            }
            
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                
                return sdf.parse(values[0]);
            } catch (ParseException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        
        /**
         * 将指定类型转换String
         */
        @Override
        public String convertToString(Map context, Object o) {
            // TODO Auto-generated method stub
            return null;
        }
    
    }

    相关文章

      网友评论

          本文标题:Struts2学习 一 自定义类型转换器

          本文链接:https://www.haomeiwen.com/subject/wlfmxftx.html