Jfinal from表单中提交的日期是1991-11格式,但是数据库字段类型是Date,getModel出错..

厌恶自己 发布于 2015/07/01 11:10
阅读 1K+
收藏 0
错误内容:
Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

我知道是因为传入的值跟TypeConverter里面的timeStampPattern格式不一样导致的

但是咱们Jfinal有没有类似于SpringMvc的转换器..可以灵活的定义日期格式(如1991-11,可以先拼接成1991-11-01 01:01:01在进行转换)

求大神指点..



加载中
0
JFinal
JFinal

    最简单的办法是将表字段类型改成 datetime,而不要使用 timestamp。datetime已经将时间精确到秒的级别了,一般是够用了。

   如果应用比较特殊非要保存毫秒精度,一是页面传过来的日期按照格式来:yyyy-mm-dd hh:mm:ss[.fffffffff],如果不按格式来,可以将表单域的name改为另外的名,如xyz,然后 getModel()完事后,再 model.set(name, TimestampKit.toTimestamp(getPara("xyz"))自行转换后再 set 一下即可

JFinal
JFinal
回复 @jockiller : 感谢支持 jfinal 发展 ^_^
厌恶自己
厌恶自己
回复 @JFinal : 十分感谢 我再研究一下..祝愿jfinal越来越好
JFinal
JFinal
回复 @jockiller : 只需认准java类型为Date,然后找一个合适的oracle字段类型在JDBC规范下对应java 的Date就可以,我记得oracel的DATE 类型是可以对应上的,只不过貌似要设置合适的长度
JFinal
JFinal
回复 @jockiller : jfinal 有关java类型与数据库字段类型的互转,完全依赖于JDBC给出的类型,可以看一下 com.jfinal.plugin.activerecrod.TableBuilder中是通过jdbc反射得到的数据表字段对应的java类型。在转换的时候也按照了这个标准来进行
厌恶自己
厌恶自己
而且 还有一个地方 不是很理解..我的oracle数据库中这个字段是date类型,不是timestamp类型..但是 刚才打打断点clazz却是timestamp,这是为啥?
下一页
0
你要爪子
你要爪子
直接getStr过来自己转一下嘛
厌恶自己
厌恶自己
那样的话 getModule方法就没用了..
0
JFinal
JFinal
    这里有个更详细的贴子,建议看一下:http://www.oschina.net/question/586193_241111
0
tinshen
tinshen

getmodel取其他的数据。针对这个一个字段特殊处理。

没必要和自己较劲。

厌恶自己
厌恶自己
谢谢回答..不过最后通过下面这种方法解决的..
0
厌恶自己
厌恶自己

引用来自“JFinal”的评论

    最简单的办法是将表字段类型改成 datetime,而不要使用 timestamp。datetime已经将时间精确到秒的级别了,一般是够用了。

   如果应用比较特殊非要保存毫秒精度,一是页面传过来的日期按照格式来:yyyy-mm-dd hh:mm:ss[.fffffffff],如果不按格式来,可以将表单域的name改为另外的名,如xyz,然后 getModel()完事后,再 model.set(name, TimestampKit.toTimestamp(getPara("xyz"))自行转换后再 set 一下即可

最后通过改写源码的方式解决的

else if (clazz == java.sql.Timestamp.class) {                                        
 	String value = s.trim().replaceAll("/", "-");                                    
     if(s.matches("^\\d{4}$")){                                                       
     	value=s+"-01-01 00:00:00";                                                   
     }else if(s.matches("^\\d{4}-\\d{1,2}$")){                                        
     	value=s+"-01 00:00:00";                                                      
     }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){                               
     	value=s+" 00:00:00";                                                         
     }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}")){                    
     	value=s+":00:00";                                                            
     }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){          
     	value=s+":00";                                                               
     }else if(s.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){ 
     	value=s;                                                                     
     }else {                                                                          
     	throw new RuntimeException("timestamp pattern is not find..");               
     }                                                                                
 	result = java.sql.Timestamp.valueOf(value);                                      
}



希望JFinal越来越好!!

JFinal
JFinal
已经做过备忘,jfinal 2.1 会让 Timestamp 支持 yyyy-mm-dd 格式的数据
厌恶自己
厌恶自己
@JFinal : 老大 最后通过这种方式解决的
返回顶部
顶部