How to get nested bean properties
Jodd is an open-source java library with lot of reusable components and feature rich utilities.
This requires the library jodd-3.3.2.jar to be in classpath.
The following example shows how to get nested bean properties
using BeanUtil.getProperty() API.
The special self-reference variable *this refers to current reference.
package com.bethecoder.tutorials.jodd.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ComplexBean {
private List<Student> studentList = new ArrayList<Student> () ;
private Map<String, List<Student>> subjectStudentMap = new HashMap<String, List<Student>> () ;
public List<Student> getStudentList () {
return studentList;
}
public void setStudentList ( List<Student> studentList ) {
this .studentList = studentList;
}
public Map<String, List<Student>> getSubjectStudentMap () {
return subjectStudentMap;
}
public void setSubjectStudentMap ( Map<String, List<Student>> subjectStudentMap ) {
this .subjectStudentMap = subjectStudentMap;
}
}
package com.bethecoder.tutorials.jodd.common;
public class Student implements java.io.Serializable {
private static final long serialVersionUID = - 5962595557796049374L ;
private String name;
private int age;
private String hobby;
public Student () {
}
public Student ( String name, int age, String hobby ) {
super () ;
this .name = name;
this .age = age;
this .hobby = hobby;
}
public String getName () {
return name;
}
public void setName ( String name ) {
this .name = name;
}
public int getAge () {
return age;
}
public void setAge ( int age ) {
this .age = age;
}
public String getHobby () {
return hobby;
}
public void setHobby ( String hobby ) {
this .hobby = hobby;
}
public String toString () {
return "Student[name = " + name + ", age = " + age + ", hobby = " + hobby + "]" ;
}
}
package com.bethecoder.tutorials.jodd.beans;
import java.util.Arrays;
import jodd.bean.BeanUtil;
import com.bethecoder.tutorials.jodd.common.ComplexBean;
import com.bethecoder.tutorials.jodd.common.Student;
public class GetNestedPropertyTest {
/**
* @param args
*/
public static void main ( String [] args ) {
Student student = new Student ( "Sriram" , 2 , "Chess" ) ;
Student student2 = new Student ( "Sudhakar" , 29 , "Painting" ) ;
Student student3 = new Student ( "Charan" , 18 , "Reading books" ) ;
ComplexBean complexBean = new ComplexBean () ;
complexBean.getStudentList () .addAll ( Arrays.asList ( student, student2, student3 )) ;
complexBean.getSubjectStudentMap () .put ( "MATHS" ,
Arrays.asList ( student, student2, student3 )) ;
complexBean.getSubjectStudentMap () .put ( "PHYSICS" ,
Arrays.asList ( student, student2 )) ;
//Same as complexBean.getStudentList().get(0);
Student std = ( Student ) BeanUtil.getProperty ( complexBean, "studentList[0]" ) ;
System.out.println ( std ) ;
//Same as complexBean.getStudentList().get(0).getName();
String str = ( String ) BeanUtil.getProperty ( complexBean, "studentList[0].name" ) ;
System.out.println ( str ) ;
//Same as complexBean.getSubjectStudentMap().get("MATHS").get(1);
std = ( Student ) BeanUtil.getProperty ( complexBean, "subjectStudentMap[MATHS].*this[1]" ) ;
System.out.println ( std ) ;
//Same as complexBean.getSubjectStudentMap().get("MATHS").get(2).getName();
str = ( String ) BeanUtil.getProperty ( complexBean, "subjectStudentMap[MATHS].*this[2].name" ) ;
System.out.println ( str ) ;
}
}
It gives the following output,
Student[name = Sriram, age = 2, hobby = Chess]
Sriram
Student[name = Sudhakar, age = 29, hobby = Painting]
Charan