Früher dachte ich, dass PropertyeDitor von SpringMVC bereitgestellt wurde, aber heute fand ich heraus, dass dies von JDK bereitgestellt wurde, was erstaunlich ist!
Was kann dieses Ding tun? Sie können eine Zeichenfolge in ein Bohnenobjekt umwandeln. Spring MVC verwendet dieses Ding, wenn das Formularformular zum Parameterobjekt des Controllers zugeordnet wird.
Siehe ein Beispiel:
Nodedo.java: ein Standard -Javabäe -Objekt
öffentliche Klasse nodedo {privater Zeichenfolge Name; private Zeichenfolge E -Mail; privates Datum; öffentlicher String getName () {return name;} public void setName (String name) {this.name = name;} public String getemail () {return email;} public void setemail (String -E -Mail) {this. oderWie testdo.java wird nodedo verwiesen:
public class testdo {private String nodhename; private nodedo nodedo; public String getNoDename () {return nodeName; } public void setNoDename (String nodename) {this.nodename = nodEname; } public nodedo getNodedo () {return nodedo; } public void setNodedo (nodedo nodedo) {this.nodedo = nodedo; }}Wir möchten eine solche Funktion implementieren:
public static void main (String [] args) löst eine Ausnahme aus {map <string, string> parameters = 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 ()); } Wie konvertieren Sie Parameter -Karte in das TestDo -Objekt?
(1) Zunächst müssen Sie einen Eigenschaftseditor definieren, der zur Umwandlung von Eigenschaften verwendet wird:
öffentliche Klasse dodedoeditor erweitert PropertyEditorsupport {öffentliche statische endgültige simpedateFormat sdf = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss"); @Override public void setAtext (String text) löst illegalArgumentException {string [] tokens = text.split ("// |") aus; Nodedo nodedo = new nodeedo (); nodedo.setName (tokens [0]); nodedo.setemail (tokens [1]); try {nodedo.setDate (SDF.Parse (Tokens [2])); } catch (parseException e) {werfen Sie neue IllegalArgumentException (e); } setValue (nodedo); }}(2) Konvertieren:
öffentliche Klasse PropertyEditorSample {static {PropertyEditorManager.registereditor (nodedo.class, dodedoeditor.class); } public static void main (String [] args) löst Ausnahme aus {map <string, string> parameters = 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 statische testdo convert (map <String, String> Parameter) löst Ausnahme aus {testdo testdo = new TestDo (); BeanInfo bi = introspector.getBeanInfo (testdo.class); PropertyDescriptor [] pds = bi.getPropertyDescriptors (); für (PropertyDescriptor PD: pds) {class <?> propertyType = pd.getPropertyType (); Method writeMethod = pd.getWritemethod (); if (propertyType == class.class) {// ignore} else if (propertyType == string.class) {writeMethod.invoke (testdo, parameters.get (pd.getName ())); } else {PropertyEditor Editor = PropertyEditorManager.Findeditor (PropertyType); if (editor! writeMethod.invoke (testdo, editor.getValue ()); } else {System.out.println ("no Editor for:"+pd.getName ()); }} return testDo; }}}Tatsächlich gibt es nur zwei wichtige Punkte
<pre name = "code"> edestext (parameters.get (pd.getName ()); // 1 editor.getValue (); // 2 // Daher wird setValue () in setAtext aufgerufen, um den konvertierten Wert zu speichern, damit Sie ihn über GetValue () erhalten können.)
Das obige ist alle diesmal zusammengestellten Inhalte. Wenn Sie immer noch etwas haben, das Sie nicht verstehen, können Sie eine Nachricht unten überlassen, um zu diskutieren. Vielen Dank für Ihre Unterstützung für Wulin.com.