ดังนั้น หากคุณต้องการให้แน่ใจว่าระบบต้องแปลงชนิด Date อย่างถูกต้อง คุณต้องเขียนคลาสการแปลงชนิดสากลเพื่อทำการแปลงชนิดระหว่าง Date และ String
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ com.great.util;
นำเข้า java.text.DateFormat;
นำเข้า java.text.SimpleDateFormat;
นำเข้า java.util.Date;
นำเข้า java.util.Map;
นำเข้า com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
DateConverter คลาสสาธารณะขยาย DefaultTypeConverter {
DateFormat สุดท้ายคงที่ส่วนตัว [] ACCEPT_DATE_FORMATS = {
SimpleDateFormat ใหม่ ("วว/ดด/ปปปป"),
ใหม่ SimpleDateFormat("yyyy-MM-dd"),
new SimpleDateFormat("yyyy/MM/dd" }); //รองรับรูปแบบวันที่สำหรับการแปลง
@แทนที่
วัตถุสาธารณะ ConvertValue (บริบทของแผนที่, ค่าวัตถุ, คลาส toType) {
if (toType == Date.class) { //เมื่อเบราว์เซอร์ส่งไปยังเซิร์ฟเวอร์ ให้แปลง String เป็น Date
วันที่วันที่ = null;
สตริง dateString = null;
พารามิเตอร์สตริง [] = (สตริง []) ค่า;
dateString = params[0];//รับสตริงวันที่
สำหรับ (รูปแบบ DateFormat : ACCEPT_DATE_FORMATS) {
พยายาม {
return format.parse(dateString);//สำรวจรูปแบบวันที่ที่รองรับแล้วแปลง
} จับ (ข้อยกเว้นจ) {
ดำเนินการต่อ;
-
-
กลับเป็นโมฆะ;
-
อย่างอื่นถ้า (toType == String.class) { // เมื่อเซิร์ฟเวอร์ส่งออกไปยังเบราว์เซอร์ ให้ทำการแปลงประเภท Date เป็น String
วันที่ วันที่ = (วันที่) ค่า;
กลับใหม่ SimpleDateFormat("yyyy-MM-dd").format(date);//รูปแบบเอาต์พุตคือ yyyy-MM-dd
-
กลับเป็นโมฆะ;
-
-
สร้างไฟล์ xwork-conversion.properties ในไดเร็กทอรีรากและเพิ่มคำสั่งต่อไปนี้ในไฟล์เพื่อลงทะเบียนตัวแปลงประเภท
java.util.Date=com.great.util.DateConverter
ในหมู่พวกเขา com.great.util.DateConverter เป็นชื่อเต็มของคลาสการแปลงวันที่รวมถึงเนมสเปซ
แล้วก็เสร็จไปหลายคนแล้ว
แต่ฉันยังทำไม่สำเร็จระบบแจ้งข้อผิดพลาด
"ข้อผิดพลาด (CommonsLogger.java:27) - ข้อผิดพลาดในการลงทะเบียนการแปลง"
"java.lang.ClassNotFoundException: com.great.util.DateConverter"
ล้มเหลวในการลงทะเบียนตัวแปลงประเภท?
หลังจากการตรวจสอบอย่างละเอียด ฉันพบว่ามีช่องว่างเพิ่มเติมหลัง "java.util.Date=com.great.util.DateConverter"! ความจริงถูกเปิดเผย ลบช่องว่างแล้ววิ่งอีกครั้ง สำเร็จ!