TypeConverter不能转化Timestamp(yyyy-MM-dd HH:ss)

日前,在表单提交日期数据的时候,yyyy-MM-dd HH:ss 格式的数据转化会出错。

JFinal 版本: 3.1

数据库:mysql (字段是datetime类型)

页面上使用#date(field)获取日期后,重新提交保存不了,本身Timestamp.valueOf也不支持这种格式转化。

@Testpublic void testSqlTimestamp() {
    Timestamp.valueOf("2017-08-06 17:41");
}
// throw e
java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

是否需要其他设置? 

求波总赐教。

评论区

JFinal

2017-08-07 10:39

升级到 jfinal 3.2 即可,去群里找我要 jfinal 3.2 的手册,升级需要注意一个地方

habaside

2019-09-06 09:14

@JFinal 波总 yyyy/MM/dd HH:ss 和 yyyy/MM/dd 类型的适配能不能添加上去? 我现在想到的是在basecontrolller 里面重写 getmodel方法,先处理request里面的 date类型参数再,调用 controlller里的getmodel。不过觉得每次都要多一步太多余了。

JFinal

2019-09-06 09:58

@habaside 我记得是可以配置的,你搜索一下,有一个 setDatePattern(...);

habaside

2019-09-06 10:51

@JFinal 额。这个 setDatePattern(...)是engine里面的DatePattern属性吧。 Converters类里的定义是 static final datePattern = "yyyy-MM-dd"的, 有两个常量只适配了 以 “-”连接年月日的 时间格式 。我这边前台传入的是 yyyy/MM/dd HH:ss 和 yyyy/MM/dd 类型的数据。 老系统由jfinal2.0升级到4.4,升级JDK1.8以后 升级了sqljdbc包到sqljdbc4.2,以前老版本的sqljdbc包读取表DATE字段为String类型,所以不用转换也能直接到数据库,现在sqljdbc4.2包读取表DATE字段为lang.sql.Date类型字段,必须使用转换器,但是格式不匹配,调用getmodel方法时出现转换错误。

JFinal

2019-09-06 11:22

@habaside jfinal 有三处左右的地方可以配置 setDatePattern, 将 jfinal 源码导入到 eclipse 中搜索一下

最首先要深度的是 configConstant(Constants me) 中的
me.setDataPattern(...);

habaside

2019-09-06 15:41

@JFinal 嗯,谢谢波总,不过应该时实现不了我要的效果。源码里发现了这个方式定制化转化器实现了:
TypeConverter 用于将客户端请求的 String 类型数据转换成指定的数据类型
通过实现 IConverter 定制自己的类型转换规则:
* 1:实现 IConverter 接口,如 MyDateConverter
* 2:注册:TypeConverter.me().regist(Date.class, new MyDateConverter());

JFinal

2019-09-06 15:50

热门反馈

扫码入社