接着上篇博客论述:
测试到这里,我要的结果已经有了,但是我还有个疑问,就是我并没有指定map的实现类,struts2.x是用什么策略去实例化这个map的?为了探索这个问题,我做了如下测试,这个测试的内容比上述还有意义得多O(∩_∩)O~。
首先,还是不指定map的实现类,修改getter方法,如下
public Map<String,Object> getMap() {
System.out.println(map);
return map;
}
即打印map,然后重新提交表格,查看控制台有如下结果
null
{age=[Ljava.lang.String;@75a032}
{age=[Ljava.lang.String;@75a032,code=[Ljava.lang.String;@686b45}
{name=[Ljava.lang.String;@15ab69d,age=[Ljava.lang.String;@75a032, code=[Ljava.lang.String;@686b45}
{sex=[Ljava.lang.String;@12bd412,name=[Ljava.lang.String;@15ab69d, age=[Ljava.lang.String;@75a032,code=[Ljava.lang.String;@686b45}
{sex=[Ljava.lang.String;@12bd412,name=[Ljava.lang.String;@15ab69d, age=[Ljava.lang.String;@75a032, code=[Ljava.lang.String;@686b45}
{sex=[Ljava.lang.String;@12bd412,name=[Ljava.lang.String;@15ab69d, age=[Ljava.lang.String;@75a032,code=[Ljava.lang.String;@686b45}
结果很有意思,相比刚才的控制台输出,多了5行,即这个map的getter方法被调用了5次。可以知道,最后一次是转换成json数据前被调用的,而前面四次就是struts2.x注值到map前的调用。从当前的测试看,每次struts2.x为某个属性赋值前,即调用属性相应的setter方法前,都会先调用这个属性的getter