RECORRER UN JAVA BEAN
Posted: martes, 26 de junio de 2012 by Skuarch in Etiquetas: bean, java, recorrer, reflexionEn ocaciones se requiere de recorrer un bean dinamicamente, en esta entrada explico como se hace usando unas clases de java
java.beans.BeanInfo
Con esta clase podemos manipular el comportamiento del bean, esta clase define métodos que devuelven descriptores para cada propiedad, método o evento que se quiere exponer.
java.beans.Introspector
Esta clase descubre los metodos del bean usando reflexion
Ejemplo
public class Test {
public test() {
MyBean mybean = new MyBean();
mybean.setAlgo("prueba");
Method m = null;
try {
BeanInfo beanInfo = Introspector.getBeanInfo(mybean.getClass());
for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
m = pd.getReadMethod();
System.out.println("property: " + pd.getName() + " value: " + m.invoke(mybean, null));
}
} catch (Exception e) {
e.printStackTrace();
}
} // end test
} // end class
Como te puedes dar cuenta la variable "m" se obtiene de pd (PropertyDescriptor) y es un metodo que despues invocamos con invoke, se le pasan como argumentos el bean y los argumentos propios del metodo en caso de que tuviera
Hola
Este ejemplo me ha abierto un mundo nuevo de posibilidades. Pero en mi desarrollo veo algo que me ha chocado bastante y no se como resolver:
Mi Bean es tal que así...
private BigDecimal concepto;
private String litConcepto;
private String importe1;
private String importe2;
private String importe3;
private String importe4;
private String importe5;
private String importe6;
private String importe7;
private String importe8;
private String importe9;
private String importe10;
Y cuando listo el contenido con tu código, me ordena de la siguiente manera:
Propiedad: class Valor: class es.aeat.jmic.ctri.imp.modelos.Linea
Propiedad: concepto Valor: 0
Propiedad: importe1 Valor:
Propiedad: importe10 Valor:
Propiedad: importe2 Valor:
Propiedad: importe3 Valor:
Propiedad: importe4 Valor:
Propiedad: importe5 Valor:
Propiedad: importe6 Valor:
Propiedad: importe7 Valor:
Propiedad: importe8 Valor:
Propiedad: importe9 Valor:
Propiedad: litConcepto Valor:
¿Hay alguna manera de respetar el orden, definido del bean?
Saludos y gracias