package demo; import java.util.ArrayList; import java.util.List; import org.zkoss.bind.annotation.BindingParam; import org.zkoss.lang.Strings; public class NestedTemplateVM { ArrayList _data; public NestedTemplateVM() { _data = provideData(); } public List getColumns() { //works // List list = new ArrayList(); // list.add("name"); // list.add("married"); // list.add("skills"); //exception !! if skills is first column List list = new ArrayList(); list.add("skills"); return list; } public List getProfileSkills(@BindingParam("profile") Profile profile, @BindingParam("column") String column) { System.out.println("Profile: " + profile); System.out.println("column: " + column); if (Strings.isEmpty(column)) { throw new NullPointerException("column should not be empty"); } return profile.getSkills(); } public ArrayList getProfiles() { return _data; } public Skill[] getAllSkills() { return Skill.values(); } private ArrayList provideData() { ArrayList data = new ArrayList(); data.add(new Profile("John", 1980, 1, 20, true, new Skill[]{Skill.AJAX})); data.add(new Profile("Mary", 1982, 2, 11, true, new Skill[]{Skill.Java})); return data; } }