原生html5时间组件,JFinal遇到了原生Html5时间组件格式转换问题怎么处理?
今天JBolt種子用戶群里有人提問,JFinal針對原生Html5的日期時間選擇組件的格式轉換支持有問題,報錯。
于是我在JBolt的Demo中加入了這些去測試一下,這里使用的都是原生Html組件。
Input type=“text”默認就是一個簡單的單行文本輸入框。
如果修改為type=date、datetime-local、time
他們的樣式就發生了變化,有選擇器出來。
下面這些月和周還好說,直接使用字符串就能接到
比如:2019年04月 后臺接收到的是2019-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這樣的標準格式,但是天不遂人愿,Html5中這個組件提交的值是這種格式: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了。package?cn.jbolt.common.config;
import?java.sql.Timestamp;
import?java.text.ParseException;
import?java.text.SimpleDateFormat;
import?java.util.Date;
import?com.jfinal.core.converter.IConverter;
import?com.jfinal.kit.StrKit;
import?cn.jbolt.common.util.DateUtil;
/**
*?JBolt中處理timestamp的converter
*?特殊處理前端原生Html5的控件?input?type="datetime"
*?@ClassName:??JBoltTimestampConverter
*?@author:?JFinal學院-小木?QQ:909854136
*?@date:???2019年4月25日?下午9:28:38
*
*/
public?class?JBoltTimestampConverter?implements?IConverter?{
private?static?final?String?datePattern?=?"yyyy-MM-dd";
private?static?final?int?dateLen?=?datePattern.length();
private?static?final?int?timeStampWithoutSecPatternLen?=?"yyyy-MM-dd?HH:mm".length();
//?mysql?type:?timestamp,?datetime
@Override
public?java.sql.Timestamp?convert(String?s)?throws?ParseException?{
//增加這一步處理就行了
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";
}
return?s;
if?(s.length()?>?dateLen)?{
return?java.sql.Timestamp.valueOf(s);
}
else?{
return?new?java.sql.Timestamp(new?SimpleDateFormat(datePattern).parse(s).getTime());
}
}
}
OK,這塊代碼在JFinal的Gitee上 波總已經上傳,遇到這個問題的可以暫時使用上面這個類代替。
只需要在JFinalConfig的類中配置配置一下就可以了。
總結
以上是生活随笔為你收集整理的原生html5时间组件,JFinal遇到了原生Html5时间组件格式转换问题怎么处理?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文本查询TextQuery类文件编写
- 下一篇: LeetCode 47. 全排列 II(