测试ActionForm注册类型自动转换

测试ActionForm注册类型自动转换

*boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他清空转换成falase

*Date类型的转换:

       *如果是java.sqlDate,页面日期的格式必须为yyyy-mm-dd,才可以转换

       *如果是java.util.Date,默认情况下,struts无法转换

 

*自定义转换器的实现步骤:

       *实现coverter接口,实现convert方法

       *convert注册,通常情况采用servlet注册

       *采用servlet注册需要注意标签的配置,<load-on-start>10</load-on-startup>

              (也可以采用struts plugn注册)

StrutsActionForm的自动收集过程:

       *将页面数据放到map中,其中map中的key为页面中的名称

       *调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于         ActionForm中的每个属性,根据类型调用相应的Converter,然后调用相应的convert                   法,将相应的字符串转换成ActionForm中指定的类型

*可以通过BeanUtils.copyProperties(目标对象,源对象)方法进行对象值的复制

实现方法一:

servlet初始化时注册

1.     实现org.apache.commons.beanutils.Converter接口,

         @Override

    public Object convert(Class type, Object value) {

        System.out.println("UtilDateConvert.value="+value);

        if(value==null){

            return value;

        }

        if(value instanceof Date){

            return value;

        }

        Date d=null;

        if(value instanceof String){

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

            try {

                d = sdf.parse(value.toString());

            } catch (ParseException e) {

                e.printStackTrace();

            }

        }

        return d;

    }

 

2.写一个servlet注册转换器,并实现init()方法

       @Override

    public void init() throws ServletException {

        //注册转换器

       ConvertUtils.register(new UtilDateConvert(), Date.class);

    }

3web.xml中配合servlet

<servlet>

    <servlet-name>UtilDateConverterInitWithervlet</servlet-name>      <servlet-class>com.zsw.struts.UtilDateConverterInitWithervlet</servlet-class>

    <!-- 使tomcat启动时初始化 -->

    <load-on-startup>3</load-on-startup>

  </servlet>

 

实现方法二:

使用PlugIn注册,

1.实现org.apache.commons.beanutils.Converter接口,     

@Override

    public Object convert(Class type, Object value) {

        System.out.println("UtilDateConvert.value="+value);

        if(value==null){

            return value;

        }

        if(value instanceof Date){

            return value;

        }

        Date d=null;

        if(value instanceof String){

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

            try {

                d = sdf.parse(value.toString());

            } catch (ParseException e) {

                e.printStackTrace();

            }

        }

        return d;

    }

2.实现org.apache.struts.action.PlugIn接口。

    @Override

    public void init(ActionServlet arg0, ModuleConfig arg1)

           throws ServletException {

       //注册转换器

       ConvertUtils.register(new UtilDateConvert(), Date.class);

    }

3.struts-config.xml中配置:

<plug-in className="com.zsw.struts.UtilDateConverterInitWithPlugin" />

 

 

你可能感兴趣的:(Date,servlet,object,struts,测试,null)