5
回答
Jfinal from表单中提交的日期是1991-11格式,但是数据库字段类型是Date,getModel出错..
错误内容:
Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

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

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

求大神指点..



举报
厌恶自己
发帖于3年前 5回/1K+阅
共有5个答案 最后回答: 3年前

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

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

--- 共有 6 条评论 ---
JFinal回复 @jockiller : 感谢支持 jfinal 发展 ^_^ 3年前 回复
厌恶自己回复 @JFinal : 十分感谢 我再研究一下..祝愿jfinal越来越好 3年前 回复
JFinal回复 @jockiller : 只需认准java类型为Date,然后找一个合适的oracle字段类型在JDBC规范下对应java 的Date就可以,我记得oracel的DATE 类型是可以对应上的,只不过貌似要设置合适的长度 3年前 回复
JFinal回复 @jockiller : jfinal 有关java类型与数据库字段类型的互转,完全依赖于JDBC给出的类型,可以看一下 com.jfinal.plugin.activerecrod.TableBuilder中是通过jdbc反射得到的数据表字段对应的java类型。在转换的时候也按照了这个标准来进行 3年前 回复
厌恶自己而且 还有一个地方 不是很理解..我的oracle数据库中这个字段是date类型,不是timestamp类型..但是 刚才打打断点clazz却是timestamp,这是为啥? 3年前 回复

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

没必要和自己较劲。

--- 共有 1 条评论 ---
厌恶自己谢谢回答..不过最后通过下面这种方法解决的.. 3年前 回复

引用来自“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越来越好!!

--- 共有 2 条评论 ---
JFinal已经做过备忘,jfinal 2.1 会让 Timestamp 支持 yyyy-mm-dd 格式的数据 3年前 回复
厌恶自己 @JFinal : 老大 最后通过这种方式解决的 3年前 回复
顶部