Solía pensar que PropertyEditor era proporcionado por SpringMVC, pero hoy descubrí que esto fue proporcionado por JDK, ¡lo cual es increíble!
¿Qué puede hacer esto? Puede convertir una cadena en un objeto de frijoles. Spring MVC usa esto al asignar el formulario del formulario al objeto de parámetro del controlador.
Ver un ejemplo:
Nodedo.java: un objeto Javabean estándar
public class Nodedo {Nombre de cadena privada; privado Correo electrónico de cadena; fecha de fecha privada; public String getName () {name return;} public void setName (name de cadena) {this.name = name;} public String getemail () {return Correo electrónico;} public void setemail (string correaje) {this.Email = correo electrónico;} public fechinet getDate () {date date;} public void setMail (date string) (date date) {this.date = date;}@overridePublic string toString () {return "nodoDo [name =" + name + ", correo electrónico =" + correo electrónico + ", date =" + dodeDoEditor.sdf.format (date) + "]";}}Al igual que testdo.java, se hace referencia a Nodedo:
public class testDo {private String NodeName; Nodedo privado Nodedo; public String getNodeName () {return noDename; } public void setNodeName (string noDename) {this.nodeName = nodename; } public nodedo getNodedo () {return nodedo; } public void setNodedo (nodedo nodoedo) {this.nodedo = nodedo; }}Queremos implementar una función como esta:
public static void main (string [] args) lanza la excepción {map <string, string> parámetros = new HashMap <String, String> () {{put ("NodeName", "XiaOpang Test"); PUT ("Nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; TestDo testDo = convert (parámetros); System.out.println (testDo.getNodeName ()); System.out.println (testDo.getNodeDo ()); } ¿Cómo convertir el mapa de parámetros en objeto testdo?
(1) Primero, debe definir una propiedad de propiedad utilizada para convertir la propiedad:
La clase pública DodeDoEditor extiende PropertyEditorsUpport {public static final SimpledateFormat sdf = new SimpleDateFormat ("aaayyy-mm-dd hh: mm: ss"); @Override public void setastext (texto de cadena) arroja ilegalargumentException {string [] tokens = text.split ("// |"); NodoDo nodoDo = new Nodedo (); nodedo.setName (tokens [0]); nodedo.setEmail (tokens [1]); intente {nodedo.setdate (sdf.parse (tokens [2])); } catch (parseException e) {tirar nueva ilegalargumentException (e); } setValue (nodedo); }}(2) Convertir:
Public Clase PropertyEditorSample {static {PropertyEditManager.RegisterEditor (nodedo.class, dodeDoEditor.class); } public static void main (string [] args) lanza la excepción {map <string, string> parámetros = new HashMap <String, String> () {{Put ("NodeName", "XiaOpang Test"); PUT ("Nodedo", "xiaopang|[email protected]|2015-10-20 12:00:00"); }}; TestDo testDo = convert (parámetros); System.out.println (testDo.getNodeName ()); System.out.println (testDo.getNodeDo ()); } private static testDo Convert (map <string, string> parámetros) lanza la excepción {testDo testDo = new testDo (); Beaninfo bi = introspector.getBeanInfo (testDo.class); PropertyDescriptor [] pds = bi.getPropertyDescriptors (); for (PropertyDescriptor Pd: PDS) {class <?> PropertyType = Pd.getPropertyType (); Método writeMethod = pd.getWriteMethod (); if (PropertyType == class.class) {// ignore} else if (PropertyType == String.class) {writemethod.invoke (testDo, parameters.get (pd.getName ())); } else {PropertyEditor Editor = PropertyEditManager.FindInditor (PropertyType); if (editor! = null) {editor.setastext (parámetros.get (pd.getName ())); writeMethod.invoke (testDo, editor.getValue ()); } else {System.out.println ("No editor para:"+pd.getName ()); }} return testDo; }}}De hecho, solo hay dos puntos clave
<preame = "código"> editor.setastext (parámetros.get (pd.getName ())); // 1 editor.getValue (); // 2 // Por lo tanto, generalmente setValue () se llama en setastext para guardar el valor convertido, para que pueda obtenerlo a través de getValue ()
Lo anterior es todo el contenido compilado esta vez. Si aún tiene algo que no comprenda, puede dejar un mensaje a continuación para discutir. Gracias por su apoyo a Wulin.com.