Dulu saya berpikir bahwa PropertyEditor disediakan oleh SpringMVC, tetapi hari ini saya mengetahui bahwa ini disediakan oleh JDK, yang luar biasa!
Apa yang bisa dilakukan hal ini? Anda dapat mengubah string menjadi objek kacang. Spring MVC menggunakan hal ini saat memetakan formulir formulir ke objek parameter pengontrol.
Lihat contoh:
Nodedo.java: Objek Javabean standar
kelas publik nodedo {name string private; private string email; tanggal tanggal pribadi; public string getName () {return name;} public void setName (name string) {this.name = name;} public string getemail () {return email) (} public void seteMail (string email) {this.email = email; {date public date () public seteMail (string email) {this.email = email; {date public date () public seteMail (string email) {this.email = email; date get date public date () {{this.email = email; date get date public date () {{this. {this.date = date;}@overridepublic string toString () {return "nodedo [name =" + name + ", email =" + email + ", date =" + dodedoeditor.sdf.format (date) + "]";}}Seperti testdo.java, nodedo direferensikan:
testo kelas publik {private string nodename; nodedo pribadi nodedo; string publik getNodename () {return nodename; } public void setNodename (string nodename) {this.nodename = nodename; } nodedo publik getNodedo () {return nodedo; } public void setnodedo (nodedo nodedo) {this.nodedo = nodedo; }}Kami ingin menerapkan fungsi seperti ini:
public static void main (string [] args) melempar pengecualian {peta <string, string> parameter = new HashMap <string, string> () {{put ("nodename", "xiaopang test"); put ("nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; Testdo testdo = convert (parameter); System.out.println (testdo.getnodename ()); System.out.println (testdo.getnodedo ()); } Bagaimana cara mengubah parameter peta menjadi objek testdo?
(1) Pertama, Anda perlu mendefinisikan properti yang digunakan untuk mengonversi properti:
DodedoEditor kelas publik memperluas propertyeditorsupport {public static final SimpleDateFormat SDF = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); @Override public void setastext (string text) melempar IllegalArgumentException {String [] tokens = text.split ("// |"); Nodedo nodedo = nodedo baru (); nodedo.setname (token [0]); nodedo.setemail (token [1]); coba {nodedo.setDate (sdf.parse (token [2])); } catch (parseException e) {lempar IllegalArgumentException baru (E); } setValue (nodedo); }}(2) Konversi:
Public Class PropertyitorSample {static {Propertyeditormanager.registereditor (nodedo.class, dodedoeditor.class); } public static void main (string [] args) melempar pengecualian {peta <string, string> parameter = new HashMap <string, string> () {{put "nodename", "xiaopang test"); put ("nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; Testdo testdo = convert (parameter); System.out.println (testdo.getnodename ()); System.out.println (testdo.getnodedo ()); } private static testdo convert (peta <string, string> parameter) melempar pengecualian {testdo testdo = testdo baru (); Beaninfo bi = introspector.getBeanInfo (testdo.class); PropertyDescriptor [] pds = bi.getPropertyDescriptors (); untuk (PropertyDescriptor PD: PDS) {class <?> PropertyType = PD.GetPropertyType (); Metode writemethod = pd.getWriteMethod (); if (propertyType == class.class) {// abaikan} else if (propertyType == string.class) {writemethod.invoke (testdo, parameter.get (pd.getName ())); } else {PropertyEditor Editor = PropertyEditormAnager.findeditor (PropertyType); if (editor! = null) {editor.setastext (parameter.get (pd.getName ())); writemethod.invoke (testdo, editor.getValue ()); } else {System.out.println ("Tidak ada editor untuk:"+pd.getName ()); }} return testdo; }}}Faktanya, hanya ada dua poin utama
<pre name = "code"> editor.setastext (parameter.get (pd.getName ()))); // 1 editor.getValue (); // 2 // Oleh karena itu, biasanya setValue () dipanggil dalam setastext untuk menyimpan nilai yang dikonversi, sehingga Anda bisa mendapatkannya melalui getValue ()
Di atas adalah semua konten yang dikompilasi kali ini. Jika Anda masih memiliki sesuatu yang tidak Anda mengerti, Anda dapat meninggalkan pesan di bawah ini untuk dibahas. Terima kasih atas dukungan Anda untuk wulin.com.