所谓 Lazy, 就是懒人写 DynaBean 的方法, 简化了 DynaBean 要先写 DynaProperty 的设定值, 我们可以完全不用去宣告他原本的预设值, 只要直接把值放进去就可以了.
在 commons-beanutils 範例中, 所举的例子很简单
DynaBean dynaBean = new LazyDynaBean();dynaBean.set("foo", "bar"); // simple
dynaBean.set("customer", "title", "Mr"); // mapped dynaBean.set("customer", "surname", "Smith"); // mapped
dynaBean.set("address", 0, addressLine1); // indexed dynaBean.set("address", 1, addressLine2); // indexed dynaBean.set("address", 2, addressLine3); // indexed
最简单的方式, 就是 set("attribute","value"); 这样就产生了一个 DynaBean 的属性.
你也可以宣告成为 LazyDynaMap, 我们可以直接取得 DynaBean 的属性及数值成为一个 Map
DynaBean dynaBean = new LazyDynaMap(); // create DynaBeandynaBean.set("foo", "bar"); // simple dynaBean.set("customer", "title", "Mr"); // mapped dynaBean.set("address", 0, addressLine1); // indexed
Map myMap = dynaBean.getMap() // retrieve the Map
如果你已经存在一个 Map, 就可以直接使用 LazyDynaMap 去建构一个新的 DynaBean..
Map myMap = .... // exisitng Map DynaBean dynaBean = new LazyDynaMap(myMap); // wrap Map in DynaBean dynaBean.set("foo", "bar"); // set properties
使用 LazyDynaClass, 我们可以简化开发 DynaProperty 的方式, 产生必要的数值型态.
MutableDynaClass dynaClass = new LazyDynaClass(); // create DynaClassdynaClass.add("amount", java.lang.Integer.class); // add property dynaClass.add("orders", OrderBean[].class); // add indexed property dynaClass.add("orders", java.util.TreeMapp.class); // add mapped property
DynaBean dynaBean = new LazyDynaBean(dynaClass); // Create DynaBean with associated DynaClassor create a LazyDynaBean and get the DynaClass...
DynaBean dynaBean = new LazyDynaBean(); // Create LazyDynaBean MutableDynaClass dynaClass = (MutableDynaClass)dynaBean.getDynaClass(); // get DynaClassdynaClass.add("amount", java.lang.Integer.class); // add property dynaClass.add("myBeans", myPackage.MyBean[].class); // add 'array' indexed property dynaClass.add("myMap", java.util.TreeMapp.class); // add mapped
可能大家比较少直接使用 commons-beanutils 的 DynaBean 部分, 其实我觉得最大的应用应该是 struts 的 DynaActionForm. 当你宣告成为 LazyValidatorForm, 可以不用继续在 struts-config.xml 中设定相关的属性值, 她会自己把 page submit 进来的 field 转换成为 ActionFormBean 的一部份.
LazyDynaBean 这个专案是
http://www.niallp.pwp.blueyonder.co.uk/ 所设计出来的未来, Struts 1.2.x 将会支援这个功能. 也可以直接下载 2004/7/31 以後的 struts build 版本, 或是下载相关的 LazyValidatorForm, LazyvalidatorActionForm, LazyValidatorMap, LazyValidatorActionMap.






