Раньше я думал, что PropertyDitor была предоставлена SpringMVC, но сегодня я узнал, что это было предоставлено JDK, что удивительно!
Что может сделать эта вещь? Вы можете преобразовать строку в объект бобов. Spring MVC использует эту вещь при сопоставлении формы формы с объектом параметров контроллера.
См. Пример:
Nodedo.java: стандартный Javabean -объект
открытый класс Nodedo {private String name; Private String Email; Private Date Date; public String getName () {return name;} public void setName (string name) {this.name = name;} public String getEmail () {return emik {this.date = date;}@overridepublic string toString () {return "nodedo [name =" + name + ", email =" + email + ", date =" + dodedoeditor.sdf.format (date) + "]";}}Как testdo.java, Nodedo ссылается:
открытый класс testdo {private String nodeName; Частный 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; }}Мы хотим реализовать такую функцию:
public static void main (string [] args) throws exception {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 = конвертировать (параметры); System.out.println (testdo.getNodeName ()); System.out.println (testdo.getnodedo ()); } Как преобразовать параметры в объект TestDo?
(1) Во -первых, вам необходимо определить PropertyDitor, используемый для конвертации свойства:
открытый класс Dodedoeditor расширяет PropertyEditorSupport {public Static Final SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-mm-dd HH: MM: SS"); @Override public void setaStxt (строковый текст) Throws allogalargumentException {string [] tokens = text.split ("// |"); Nodedo Nodedo = new Nodedo (); Nodedo.SetName (Tokens [0]); Nodedo.setemail (tokens [1]); try {nodedo.setDate (sdf.parse (tokens [2])); } catch (parseException e) {бросить новый allosalargumentException (e); } setValue (Nodedo); }}(2) преобразовать:
Public Class ProperationEditorsample {static {ProperationEditormanager.RegisterEditor (nodedo.class, dodedoeditor.class); } public static void main (string [] args) бросает исключение {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 = конвертировать (параметры); System.out.println (testdo.getNodeName ()); System.out.println (testdo.getnodedo ()); } private static testdo convert (map <string, string> параметры) бросает исключение {testdo testdo = new testdo (); Beaninfo bi = Interspector.getbeaninfo (testdo.class); PropertyDescriptor [] pds = bi.getPropertyDescriptors (); для (PropertyDescriptor PD: PDS) {class <?> PropertyType = pd.getPropertyType (); Method writemethod = pd.getWritemethod (); if (PropertyType == class.class) {// Игнорировать} else if (PropertyType == string.class) {writemethod.invoke (testdo, parameters.get (pd.getName ())); } else {ProperateDitor Editor = ProperateEditormanager.fenderitor (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 () вызывается в setaStxt, чтобы сохранить преобразованное значение, чтобы вы могли получить его через getValue ()
Выше всего, что составлен на этот раз. Если у вас все еще есть что -то, чего вы не понимаете, вы можете оставить сообщение ниже, чтобы обсудить. Спасибо за поддержку Wulin.com.