struts1自定义类型转换

jsp前台中接收的均是string类型的数据,struts中有内至的转换器,能转换常规类型的数据,如int,float, double, string, boolean(Y/N 1/0 true/false on/off), .时间型:java.sql.Date(2009-12-23)可以转换。但java.util.Date不能转换。那我们就写一个utilDate的转换器。

若数据为空,int, 默认是0 , double默认是0.0, boolean默认是false. 
java.sql.Date 前台不能为空,且格式必须是yyyy-MM-dd类型

java.sql.Timestamp 要求:Timestamp format must be yyyy-mm-dd hh:mm:ss.fffffffff 如:2010-02-12 12:25:20.0



utilDate的转换器

类:

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

import org.apache.commons.beanutils.Converter;

/**
* java.util.Date struts转换器
* @author dell
*
*/
public class UtilDateConverter implements Converter {

public Object convert(Class type, Object value) {

   Date d = null;
   if(value == null){
    return value;
   }
        if(value instanceof String){
        SimpleDateFormat sfd = new SimpleDateFormat("yyyyy-MM-dd");
        try {
     d = sfd.parse((String) value);
    } catch (ParseException e) {
     e.printStackTrace();
    }
        }
        return d;
}

}


转换器初始化加载方式2种:

一是Sverlet初始化init


import java.util.Date;

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

import org.apache.commons.beanutils.ConvertUtils;

public class UtilDateServlet extends HttpServlet {


/**
* 初始化:注册UtilDateConverter转换器
*
* @throws ServletException if an error occure
*/
public void init() throws ServletException {
    ConvertUtils.register(new UtilDateConverter() , Date.class );
}

}

web.xml

<!-- java.util.Date struts转换器初始化 -->
<servlet>
    <servlet-name>UtilDateServlet</servlet-name>
    <servlet-class>com.zd.util.UtilDateServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
</servlet>


二、是用plugin加载

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;

/**
* PlugIn方式加载 java.util.Date转换器
* @author dell
*
*/
public class UtilDatePlugIn implements PlugIn {


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

public void destroy() {
   // TODO Auto-generated method stub

}


}

struts-config.xml

<!-- 嵌入java.util.Date类型转换器 -->
<plug-in className="com.util.UtilDatePlugIn" />



=============================================

自定义struts Converter解决不能输入空日期



http://hi.baidu.com/wodehao1985h/blog/item/111709189714024d42a9ad79.html



=============================================

在Struts中的时间类型转换
在struts中前台页面只能传String类型的值,时间类型就需要在后面转换了。DateConvertUtil类:

private java.util.Date saveDate;
              //普通的set/get方法
              public void setSaveDate(java.util.Date saveDate){
                  this.saveDate=saveDate;
              }
              public java.util.Date getSaveDate(){
                  return this.saveDate;
              } 
              //为Struts准备的方法,时期的格式假定是 2000-12-31 23:59:59
              public void setSaveDateAsString(String saveDate){
                 java.text.DateFormat dateFormat =new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 this.saveDate=dateFormat.parse(saveDate);
              }
              public String getSaveDateAsString(){
                 java.text.DateFormat dateFormat =new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 return dateFormat.Format(this.saveDate);            

在action里面获得时间类型的字符串,然后调用转换方法就可以了。Ok!!!

     
       }

 

你可能感兴趣的:(struts1)