在 jdon 框架中使用日期类型时要注意的问题

在开发过程中,我发现有一个问题要注意:当我们在 ActionForm、model(模型)中使用了 java.util.Date 类来定义时间属性的时候,对这个属性的读写就会出错。我追查了很久,最后问题出在模型与 form 之间的熟悉拷贝过程中。我看了一下框架源码,在框架源码中,模型和 form 之间的属性传递是通过 apache 的一个公共组件中的类方法:PropertyUtils.copyProperties 来进行复制的。而这个方法有个需要注意的地方,那就是 java.util.Date 类的属性是不被支持互相复制的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。我把我的程序中的日期由 java.util.Date 改为 java.sql.Date 后,就没有错误了。我查了一下其他的例子,发现其日期类型一般被转为 String 类型来存储,而在 jpetstore 中用到了 java.util.Date 类型的属性:private Date orderDate;,我还没空测试这个属性是否能够正常读写。不过我猜应该是不正常的。大家可以测试一下看看。

>>模型和 form 之间的属性传递是通过 apache 的一个公共组件中的类方法

框架中的文档:
ModelForm相当于Struts的ActionForm,属于界面对象,使用Jdon框架一个要求是:ModelForm的内容(字段/方法)需要大于等于Model的内容,这样,才能将表现层的数据传送到Model业务层处理,ModelForm内容可以多于Model内容,这些多余内容可能只与界面有关,不涉及业务逻辑。

不知道apache的类方法进行拷贝的原理是什么?ModelForm的内容(字段/方法)一定要大于等于Model的内容吗?我觉得只是模型中需要与界面交互或者要交给界面显示的部分才有必须要写在ModelForm里面,模型和ModelForm的字段没有必要要求谁比谁多或者少吧。

PropertyUtils.copyProperties 会不支持util.Date拷贝?这是struts一个通用底层的工具,待研究。


Model模型向ActionForm进行拷贝的时候是浅拷贝吗?
[该贴被oojdon于2008-04-02 12:38修改过]

yes