[struts2.x] 探索struts值栈如何赋值给action成员变量

本文探讨了Struts2.x中值栈如何将表单数据赋值给Action的成员变量,尤其是关于Map类型的成员变量。通过实验发现,Struts2.x在赋值前会调用getter方法,若对象为空则通过setter方法实例化。作者通过不同测试揭示了Struts2.x处理基础类型和对象嵌套属性的区别,并强调了getter方法的重要性。
摘要由CSDN通过智能技术生成

接着上篇博客论述:

测试到这里,我要的结果已经有了,但是我还有个疑问,就是我并没有指定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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值