今天JBolt有人在种子用户群中提问,JFinal针对原生Html选择组件的格式转换支持有问题,报错。

于是我在JBolt的Demo添加这些测试,这里使用的是原生Html组件。
Input type=“text默认是一个简单的单行文本输入框。
如果修改为type=date、datetime-local、time
他们的样式就发生了变化,有选择器出来。
接下来的几个月和周可以直接用字符串接收
比如:2019年04月 2019-049-04
2019年底15周后台收到2019-W15
如何分析这些字符串并不是什么大问题,系统正常处理。
type="date"的后台使用getData("date")可以接收
type="time"没有后台getTime("time")提供,可先使用String接收,然后自己分析数字拼接成java.sql.Time,也可以调用TimeTypeConverter去转。
上面这个有问题type="datetime-local"的。
既有日期,也有时间。
但我们通常看到的格式是:2019-04-25 23:08:38这样的标准格式,但是天不遂人愿,Html该组件在5中提交的值为此格式:2019-04-25T23:08。
中间的空间变成了一个T,此时,我们数据库中定制的字段类型是datetime类型(mysql)对应java类型的timestamp,对应的converter是TimestampTypeConverter.java
但是这个类别并没有处理这个多余的问题T,这个问题已经反馈给波总,新版本增加了这个兼容性。
谈谈处理方法:
就是在converter如果带T的数据来判断,如果没有空间 还包括字符'-' 字符'T将T字符转换为空格字符是必要的。
直接修改新版
com.jfinal.core.converter.Converters.java这个类中的
在新版本出来之前,你需要扩展自己TimestampConverter.java了。packagecn.jbolt.common.config;
importjava.sql.Timestamp;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importcom.jfinal.core.converter.IConverter;
importcom.jfinal.kit.StrKit;
importcn.jbolt.common.util.DateUtil;
/**
*JBolt中处理timestamp的converter
*前端原生特殊处理Html5的控件inputtype="datetime"
*@ClassName:JBoltTimestampConverter
*@author:JFinal学院-小木QQ:909854136
*@date:2019年4月25日下午9:28:38
*
*/
publicclassJBoltTimestampConverterimplementsIConverter{
privatestaticfinalStringdatePattern="yyyy-MM-dd";
privatestaticfinalintdateLen=datePattern.length();
privatestaticfinalinttimeStampWithoutSecPatternLen="yyyy-MM-ddHH:mm".length();
//mysqltype:timestamp,datetime
@Override
publicjava.sql.Timestampconvert(Strings)throwsParseException{
///添加此步骤。
if(s.indexOf("")==-1&&s.indexOf("-")!=-1&&s.indexOf(":")!=-1&&s.indexOf("T")!=-1){
s=s.replace("T","");
}
if(timeStampWithoutSecPatternLen==s.length()){
s=s ":00";
}
returns;
if(s.length()>dateLen){
returnjava.sql.Timestamp.valueOf(s);
}
else{
returnnewjava.sql.Timestamp(newSimpleDateFormat(datePattern).parse(s).getTime());
}
}
}
OK,这块代码在JFinal的Gitee上 波总已上传,遇到此问题可暂时使用上述类别。
只需要在JFinalConfig可以配置类中的配置。