Java BeanUtils - Acceso a propiedades anidadas

Descripción

Puede acceder al valor de la propiedad anidada del bean concatenando los nombres de propiedad de la ruta de acceso utilizando "." separadores.

Puede obtener y establecer los valores de Nested propiedad utilizando los siguientes métodos:

  • PropertyUtils.getNestedProperty (objeto, cadena)

  • PropertyUtils.setNestedProperty (objeto, cadena, objeto)

Parámetros:

  • Object: Es un bean cuya propiedad se va a obtener o modificar.

  • String: Es un nombre de la propiedad anidada a obtener o modificar.

Ejemplo

En este ejemplo, verá cómo obtener y establecer los valores de la propiedad anidada. Crearemos tres clases; SubBean , AppLayer1Bean para beans y BeanUtilsDemo como programa principal para ejecutar.

import org.apache.commons.beanutils.PropertyUtils;

public class BeanUtilsDemo {
    public static void main(String args[]){
        try{
            // create the bean
            AppLayer1Bean nested = new AppLayer1Bean();
            // set a SubBean which is part of another bean
            SubBean sb = new SubBean();
            sb.setStringProperty("Hello World from SubBean");
            nested.setSubBean(sb);
		
            // accessing and setting nested properties
            PropertyUtils.setNestedProperty(
                nested, "subBean.stringProperty",
                "Hello World from SubBean, set via Nested Property Access");
			
            System.out.println(
                PropertyUtils.getNestedProperty(nested, "subBean.stringProperty"));
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}

Ahora crearemos otra clase llamada SubBean.java como se muestra a continuación:

public class SubBean {
    private int intProperty;
    private String stringProperty;
	
    public void setIntProperty(int intProperty) { 
        this.intProperty = intProperty; 
    }
    public int getIntProperty() {
        return this.intProperty; 
    }
	
    public void setStringProperty(String stringProperty) { 
        this.stringProperty = stringProperty; 
    }
    public String getStringProperty() { 
        return this.stringProperty; 
    }
}

Cree una clase más AppLayer1Bean.java junto con el siguiente código:

public class AppLayer1Bean {
    private SubBean subBean;

    public void setSubBean(SubBean subBean) {
        this.subBean = subBean;
    }
    public SubBean getSubBean(){
        return this.subBean;
    }	
}

Salida

Realicemos los siguientes pasos para ver cómo funciona el código anterior:

  • Guarde el primer código anterior como BeanUtilsDemo.java .

  • Ahora ejecute el código usando la opción Ejecutar o Ctrl + f11 y se mostrará la salida como se muestra a continuación.

Firmas del método PropertyUtils

Los siguientes métodos son proporcionados por la clase PropertyUtils , que acepta cualquier combinación arbitraria de acceso de propiedad simple, indexado y mapeado para obtener y establecer el valor de la propiedad del bean especificado.

  • PropertyUtils.getProperty (objeto, cadena)

  • PropertyUtils.setProperty (objeto, cadena, objeto)

Parámetros:

  • Object: Es un bean cuya propiedad se va a obtener o modificar.

  • String: Es un nombre de la propiedad indexada y / o anidada que se va a obtener o modificar.

Ejemplo

El siguiente programa simple ilustra el uso de los métodos getProperty y setProperty:

import org.apache.commons.beanutils.PropertyUtils;

public class PropertyUtilsTest {
    public static void main(String args[]){
        try{
            Tv Color = new Tv();
            PropertyUtils.setProperty(Color, "color", "Black");
            String value = (String) PropertyUtils.getProperty(Color, "color");
            System.out.println("The color value of Tv is: " + value);
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
    public static class Tv{
        private String color;
	     
        public String getColor(){
            return color;
        }
        public void setColor(String color){
            this.color = color;
        }
    }
}

Ejecute el código como se especifica en el ejemplo anterior y obtendrá el siguiente resultado: