ฉันเคยคิดว่า PropertyEditor จัดทำโดย SpringMVC แต่วันนี้ฉันพบว่าสิ่งนี้จัดทำโดย JDK ซึ่งน่าทึ่งมาก!
สิ่งนี้ทำอะไรได้บ้าง? คุณสามารถแปลงสตริงเป็นวัตถุถั่ว Spring MVC ใช้สิ่งนี้เมื่อรูปแบบการแมปกับวัตถุพารามิเตอร์ของคอนโทรลเลอร์
ดูตัวอย่าง:
Nodedo.java: วัตถุ Javabean มาตรฐาน
คลาสสาธารณะ nodedo {ชื่อสตริงส่วนตัว; อีเมลสตริงส่วนตัว; วันที่ส่วนตัววันที่; สตริงสาธารณะ getName () {ชื่อคืน;} โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name;} สตริงสาธารณะ getEmail () {return email;} โมฆะสาธารณะ setemail (string อีเมล) {this.email = อีเมล; {this.date = date;}@overridepublic String toString () {return "nodedo [name =" + name + ", email =" + email + ", date =" + dodedoeditor.sdf.format (วันที่) + "]";}}}เช่น testdo.java, Nodedo มีการอ้างอิง:
Public Class Testdo {Private String Nodename; Private Nodedo Nodedo; สตริงสาธารณะ getNodeName () {return nodename; } โมฆะสาธารณะ setNodeName (String nodeName) {this.nodeName = nodeName; } Public Nodedo getNodedo () {return nodedo; } โมฆะสาธารณะ setNodedo (nodedo nodedo) {this.nodedo = nodedo; -เราต้องการใช้ฟังก์ชั่นเช่นนี้:
โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {แผนที่ <สตริงสตริง> พารามิเตอร์ = new hashmap <สตริงสตริง> () {{put ("nodeName", "xiaopang test"); ใส่ ("Nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00 น."); - testdo testdo = แปลง (พารามิเตอร์); System.out.println (testdo.getNodename ()); System.out.println (testdo.getNodedo ()); - วิธีการแปลงพารามิเตอร์แผนที่เป็นวัตถุ testdo?
(1) ก่อนอื่นคุณต้องกำหนดคุณสมบัติผู้ใช้ที่ใช้ในการแปลงคุณสมบัติ:
ระดับสาธารณะ DodedoEditor ขยาย PropertyEditorSupport {สาธารณะคงที่สุดท้าย SimpledateFormat SDF = New SimpleDateFormat ("YYYY-MM-DD HH: MM: SS"); @Override โมฆะสาธารณะ setAstatext (ข้อความสตริง) พ่น unglegalargumentException {string [] tokens = text.split ("// |"); Nodedo nodedo = new nodedo (); Nodedo.setName (โทเค็น [0]); Nodedo.setEmail (โทเค็น [1]); ลอง {nodedo.setDate (sdf.parse (โทเค็น [2])); } catch (parseexception e) {โยน unlegalargumentException ใหม่ (e); } setValue (nodedo); -(2) แปลง:
ชั้นเรียนสาธารณะ PropertyEditorsample {Static {PropertyEditorManager.registerEditor (Nodedo.class, DodedoEditor.class); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {แผนที่ <สตริงสตริง> พารามิเตอร์ = ใหม่ hashmap <สตริงสตริง> () {{ใส่ ("nodename", "xiaopang test"); ใส่ ("Nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00 น."); - testdo testdo = แปลง (พารามิเตอร์); System.out.println (testdo.getNodename ()); System.out.println (testdo.getNodedo ()); } private static testdo Convert (แผนที่ <สตริง, สตริง> พารามิเตอร์) พ่นข้อยกเว้น {testdo testdo = new testDo (); beaninfo bi = introspector.getBeanInfo (testdo.class); PropertyDescriptor [] PDS = bi.getPropertyDescriptors (); สำหรับ (PropertyDescriptor PD: PDS) {class <?> propertyType = pd.getPropertyType (); วิธีการ writemethod = pd.getWriteMethod (); if (propertyType == class.class) {// ละเว้น} อื่นถ้า (propertyType == string.class) {writemethod.invoke (testdo, parameters.get (pd.getName ())); } else {propertyEditor editor = propertyEditorManager.findeditor (PropertyType); if (editor! = null) {editor.setastext (parameters.get (pd.getName ())); writemethod.invoke (testdo, editor.getValue ()); } else {system.out.println ("ไม่มีตัวแก้ไขสำหรับ:"+pd.getName ()); }} return testdo; -ในความเป็นจริงมีเพียงสองประเด็นสำคัญ
<pre name = "code"> editor.setastext (parameters.get (pd.getName ())); // 1 editor.getValue (); // 2 // ดังนั้นจึงมักจะ setValue () เรียกว่า setastext เพื่อบันทึกค่าที่แปลง
ข้างต้นเป็นเนื้อหาทั้งหมดที่รวบรวมในครั้งนี้ หากคุณยังมีสิ่งใดที่คุณไม่เข้าใจคุณสามารถฝากข้อความไว้ด้านล่างเพื่อพูดคุย ขอบคุณสำหรับการสนับสนุน Wulin.com