ActionForm使用java.util.Date数据类型解决方法(转)

来源:互联网 发布:徐州淘宝村 编辑:程序博客网 时间:2024/04/20 06:56

根据struts类型转换原理

Struts对ActionForm的自动搜集过程:
* 将页面数据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value值
* 调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性
* 根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型

解决方法
1.先申明一个转换类
package com.xx.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;

public class UtilDateConverter implements Converter {

@Override
public Object convert(Class type, Object value) {
   // TODO Auto-generated method stub
   System.out.println("UtilDateConverter.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((String)value);
   }

   catch (ParseException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
    }
   }
   return d;
}

}


2.再使服务器启动设使给类注册进去
方法1.使用servlet注册

package com.xx.util;

import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.commons.beanutils.ConvertUtils;

/**
* 注册java.util.date转换器
* @author Administrator
*
*/
public class UtilDateConverterInitWithServlet extends HttpServlet {

@Override
public void init() throws ServletException {
   System.out.println("UtilDateConverterInitWithServlet.init()");
   ConvertUtils.register(new UtilDateConverter(), Date.class);
}

}

其中web.xml文件加上
<servlet>
<servlet-name>UtilDateConverterInitWithServlet</servlet-name>
<servlet-class>com.bjsxt.struts.UtilDateConverterInitWithServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>


方法2.使用struts中的plug-in进行注册
package com.xx.util;

import java.util.Date;

import javax.servlet.ServletException;

import org.apache.commons.beanutils.ConvertUtils;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

public class UtilDateConverterInitWithPlugin implements PlugIn {

public void destroy() {
}

public void init(ActionServlet servlet, ModuleConfig config)
    throws ServletException {
   System.out.println("UtilDateConverterInitWithPlugin.init()");
   ConvertUtils.register(new UtilDateConverter(), Date.class);
}
}

其中struts-config.xml文件加上

<plug-in className="com.xx.util.UtilDateConverterInitWithPlugin"/>

原创粉丝点击