Using dynamic beans

We can now implement dynamic beans like the following and use them as usual, but we need to handle the property access in the methods inherited from DynamicBean. The following class can serve as a starting point:

public class GenericDynamicBean implements DynamicBean {
    public GenericDynamicBean() {
    }

    @Override
    public Object getProperty(String name) {
        System.err.printf("GenericDynamicBean.getProperty(%s)\n", name);
        return "Value for " + name;
    }

    @Override
    public void setProperty(String name, Object value) {
        System.err.printf("GenericDynamicBean.setProperty(%s, %s)\n", name, value);
    }
    
    @Override
    public Class<?> getPropertyType(String name) {
        System.err.printf("GenericDynamicBean.getPropertyType(%s)\n", name);
        return Object.class;
    }

    @Override
    public boolean isReadOnly(String name) {
        System.err.printf("GenericDynamicBean.isReadOnly(%s)\n", name);
        return false;
    }
}

If we register this class as managed bean called “dbean”, we can use EL expressions like #{dbean.test} or #{dbean.anyname} in a JSF page and check the console output to see how the framework is calling the methods when accessing the JSF page.