我用的是struts 1.3
好像在struts中需要录入数据,但是struts不支持对Date对象的解析,大家有什么好办法去将string转换成Date吗?

解决方案 »

  1.   

    Validator里有现成的验证实例。验证通过了就可以把String转成Date了。
      

  2.   

    sorry,看错了,Struts不会把一个字符串转化成Date再存到form里的,再用一层vo吧,把form的内容封装到一个或多个vo实例中,这样更符合面向对象的思想,呵呵。
      

  3.   

    用个javabean比较好做的。也更加方便点。
    javabean里面用java.sql.Data 
      

  4.   

    SimpleDateFormat   formatter   =   new   SimpleDateFormat   ("yyyy-MM-dd");   
      String   s="1998-01-02";   
      Date   date   =   formatter.parse(s);
      

  5.   


    我同意这个。。如果是Hibernate的话,最好把映射文件里的type改成java.sql.Date..
      

  6.   

    一般看来 是弄一个Converter  专门处理java.util.Date主要代码如下UtilDateConverter.java
    public class UtilDateConverter implements Converter {

    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); public Object convert(Class type, Object value) {
    if (value == null) {
    return value;
    }
    if (value instanceof Date) {
    return value;
    }
    if (value instanceof String) {
    try {
    return format.parse((String)value);
    } catch (ParseException ignore) {
    }
    }
    return null;
    }}
    然后在弄个servlet  。InitServlet.javapublic class InitServlet extends HttpServlet { @Override
    public void init() throws ServletException {

    //注册日期类型的转换器
    ConvertUtils.register(new UtilDateConverter(), Date.class); }}
    注意配置 InitServlet  哦  在 web.xml 里里面配置
    <servlet>
        <servlet-name>initServlet</servlet-name>
        <servlet-class>com.xxx.xxx.xxx.InitServlet</servlet-class>
        <load-on-startup>3</load-on-startup>
      </servlet> 
      

  7.   

    测试了下,如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,Struts才可以转换。
      

  8.   

    差一点点忘了,这个依赖于commons-beanutils包。我都是在form-〉vo这个时候用beanutils自动转换的,试了才知道原来struts也在用beanutils做转换,而且转换成功就赋值给ActionForm。
      

  9.   


    所以应该怎么讲string转换成date呢。。
      

  10.   


    如7楼所说,采用Converter方式可以处理,然后通过Servlet加载,印象在中,也可以通过Plug-In的方式进行加载。
      

  11.   

    只要在数据库里 把 日期都定义为了  varchar(20) 了, 在页面做验证就可以了。。那样就不用那么麻烦了
      

  12.   

    创建一个日期转换器类DateConverter.java,该类代码如下:程序代码package zizz.struts;import java.text.SimpleDateFormat;
    import org.apache.commons.beanutils.Converter;
    import java.util.Set;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.text.ParseException;/**

    * 日期转换对象,使用该转换器,在BaseForm当中做一下注册,系统自动地帮助字符的日期表示转换为java.util.Date对象.
    * @author zizz.
    * Create Time:2006-9-11 19:11:47.
    */
    public class DateConverter implements Converter {
        /**
         * 日期格式化对象.
         */
        private static SimpleDateFormat df = new SimpleDateFormat();
        
        /**
         * 模式集合.
         */
        private static Set<String> patterns = new HashSet<String>();
        //注册一下日期的转换格式
        static{
            DateConverter.patterns.add("yyyy-MM-dd");
            DateConverter.patterns.add("yyyy-MM-dd HH:mm");
            DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss");
            DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss");
        }
        
        /**
         * 日期转换器.
         * @param type Class
         * @param value Object
         * return Date Object.
         */
        public Object convert(Class type,Object value){
            if(value == null){
                return null;
            }else if(value instanceof String){
                Object dateObj = null;
                Iterator it = patterns.iterator();
                while(it.hasNext()){
                    try{
                        String pattern = (String)it.next();
                        df.applyPattern(pattern);
                        dateObj = df.parse((String)value);
                        break;
                    }catch(ParseException ex){
                        //do iterator continue
                    }
                }
                return dateObj;
            }else{
                return null;
            }
        }
    }在Form里注册
    public class UserForm extends ActionForm{
        
        static{
            ConvertUtils.register(new DateConverter(), Date.class);
        }}