J'avais l'habitude de penser que PropertyEditor avait été fourni par SpringMVC, mais aujourd'hui, j'ai découvert que cela avait été fourni par JDK, ce qui est incroyable!
Que peut faire cette chose? Vous pouvez convertir une chaîne en un objet Bean. Spring MVC utilise cette chose lors du mappage du formulaire de formulaire dans l'objet de paramètre du contrôleur.
Voir un exemple:
Nodedo.java: un objet Javabean standard
classe publique Nodedo {nom de chaîne privée; courrier électronique de chaîne privée; date privée date; public String getName () {return name;} public void setName (nom de chaîne) {this.name = name;} public string getEmail () {return e-mail;} public void setemail (String e-mail) {this.email = e-mail;} public date GetDate () {return date;} public Void setdate) {this.date = date;} @ OverRidePublic String toString () {return "nodedo [name =" + name + ", e-mail =" + e-mail + ", date =" + dododiditor.sdf.format (date) + "]";}}Comme testdo.java, Nodedo est référencé:
classe publique TestDo {private String nodeName; 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; }}Nous voulons implémenter une fonction comme celle-ci:
public static void main (string [] args) lève exception {map <string, string> Paramètres = new hashmap <string, string> () {{put ("nodeName", "xiaOpang test"); put ("nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; Testdo testdo = convert (paramètres); System.out.println (testdo.getNodeName ()); System.out.println (testdo.getNodedo ()); } Comment convertir la carte des paramètres en objet TestDo?
(1) Tout d'abord, vous devez définir un PropertyEditor utilisé pour convertir la propriété:
La classe publique DodEdoEditor étend PropertyEditorsupport {public static final SimpledateFormat sdf = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss"); @Override public void setastext (string text) lève illégalArgumentException {string [] tokens = text.split ("// |"); NODEDO NODEDO = NOUVEAU NODEDO (); NODEDO.SETNAME (TOKENS [0]); Nodedo.setEmail (Tokens [1]); essayez {nodedo.setDate (sdf.parse (tokens [2])); } catch (paSeException e) {lancer un nouveau IllégalArgumentException (e); } setValue (Nodedo); }}(2) Convertir:
classe publique PropertyEditorsample {static {propriétéEditorManager.RegisterEditor (Nodedo.class, DoDedoEditor.class); } public static void main (string [] args) lève exception {map <string, string> Paramètres = new hashmap <string, string> () {{put ("nodeName", "xiaOpang test"); put ("nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; Testdo testdo = convert (paramètres); System.out.println (testdo.getNodeName ()); System.out.println (testdo.getNodedo ()); } Private Static TestDo convert (map <string, string> Paramètres) lève l'exception {testdo testdo = new testDo (); Beaninfo bi = introspector.getBeanInfo (testdo.class); PropertyDescriptor [] pds = bi.getPropertyDescriptors (); for (propriétéDescriptor pd: pds) {class <?> PropertyType = pd.getPropertyType (); Méthode WriteMethod = pd.getWriteMethod (); if (propriétéType == class.class) {// ignore} else if (propriétéType == String.class) {WriteMethod.invoke (testdo, paramètres.get (pd.getName ())); } else {PropertyEditor Editor = PropertyEditorManager.Fenditor (PropertyType); if (editor! = null) {editor.setastext (paramètres.get (pd.getName ())); WriteMethod.invoke (testdo, editor.getValue ()); } else {System.out.println ("Aucun éditeur pour:" + pd.getName ()); }} return testdo; }}}En fait, il n'y a que deux points clés
<pren name = "code"> editor.setastext (paramètres.get (pd.getName ())); // 1 editor.getValue (); // 2 // par conséquent, généralement setValue () est appelé dans setastext pour enregistrer la valeur convertie, afin que vous puissiez l'obtenir via getValue ()
Ce qui précède est tout le contenu compilé cette fois. Si vous avez toujours quelque chose que vous ne comprenez pas, vous pouvez laisser un message ci-dessous pour discuter. Merci pour votre soutien à Wulin.com.