• 如何自定义类型转换器 ?


    问题4. 如何自定义类型转换器 ?
    1). 为什么需要自定义的类型转换器 ? 因为 Struts 不能自动完成 字符串 到 引用类型 的 转换.
          在java中,基本类型有int,double,float,boolean,char,引用类型就是对象类型,例如数组吖,对象吖,这些

    2). 如何定义类型转换器:
    StrutsTypeConverter 类--->继承OGNL.defaultTypeConverter---》继承OGNL.TypeConverter

    I. 开发类型转换器的类: 所以咋们一般扩展StrutsTypeConverter 类就足够了

     1 package com.atguigu.struts2.Converter;
     2 
     3 import java.sql.Date;
     4 import java.text.DateFormat;
     5 import java.text.ParseException;
     6 import java.text.SimpleDateFormat;
     7 import java.util.Map;
     8 
     9 import org.apache.struts2.util.StrutsTypeConverter;
    10 
    11 public class TestTypeConverter extends StrutsTypeConverter {
    12     
    13     /*
    14      * 此方法是用来将传进来的字符串数组变成一个Object对象
    15      * 
    16      * 
    17      */
    18     DateFormat dateFormat=new SimpleDateFormat("YYYY-MM-DD hh:mm:ss");
    19     public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
    20         if(arg2==Date.class){
    21             if(arg1!=null&&arg1.length>0){
    22                 String string=arg1[0];
    23                 try {
    24                     dateFormat.parseObject(string);
    25                 } catch (ParseException e) {
    26                     // TODO Auto-generated catch block
    27                     e.printStackTrace();
    28                 }
    29             }
    30         }
    31 
    32         return arg1;
    33     }
    34     
    35     /*
    36      *
    37      * 此方法是用来回显的时候调用的,将Object对象转换成字符串
    38      * 
    39      */
    40 
    41     public String convertToString(Map arg0, Object arg1) {
    42         //判断是否为Date对象
    43         if(arg1 instanceof Date){
    44             //是的话,就使用format()方法将Date对象转换成一个字符串
    45             return dateFormat.format(arg1);
    46         }
    47         return null;
    48     }
    49 
    50 }

    II. 配置类型转换器:
    有两种方式
    ①. 基于字段的配置:
    > 在字段所在的 Model(可能是 Action, 可能是一个 JavaBean) 的包下, 新建一个 ModelClassName-conversion.properties 文件

    > 在该文件中输入键值对: fieldName=类型转换器的全类名. 

    fieldName=类型转换器的全类名
    例如下面的:
    birth=com.atguigu.struts2.Converter.TestTypeConverter

    > 第一次使用该转换器时创建实例.
    > 类型转换器是单实例的!



    ②. 基于类型的配置:
    > 在 src 下新建 xwork-conversion.properties

    > 键入: 待转换的类型=类型转换器的全类名.

    需要转换的类型=转换器全类名
    例如下面的:
    java.util.Date=com.atguigu.struts2.Converter.TestTypeConverter

    > 在当前 Struts2 应用被加载时创建实例.所以若在转换器里有引用Web.xml里的参数时就要注意了,因为 转换器在Struts2在加载时就已经创建实例了,而此时web.xml还没加载呢,所以你在转换器里引用web.xml的资源就为空了,所以一定要做是否非空做出判断,要不要转换器还是起不了作用

    -->

  • 相关阅读:
    上门量体不能停,量品打造“一人一版”的私人定制衬衫,半年覆盖30个城市
    直击中小互联网企业痛点,程序员客栈推出短期雇佣功能
    现在,培训老师也有可能是你未来的 Boss
    【蓝领日志】捷库,给B端提供蓝领员工的标准化培训工具
    【调研】华图教育:领跑公职培训市场
    社区服务中心+护理员培训+云平台,中康行健“一体两翼”构建养老生态体系
    餐厅孵化器“优粮生活”,用孵化模式打造统一独立外卖品牌
    语培市场热度不减,“手韩”背后的垂直领域空间在哪?
    母基金_百度百科
    小编亲测杭州最火的海南鸡饭,最好吃的居然是……-搜狐吃喝!!!
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/3992751.html
Copyright © 2020-2023  润新知