今天在Struts2的Action 有个页面数据加载的init****(就这样叫吧)方法,主要点击菜单的时候加载页面数据,然后我又写了个方法叫get****ById(勉强就叫这个吧),这个方法是点击某条数据的时候获取ID,并查找子项。但是当我写好了之后,我发现页面数据出错了,因为点击菜单时,并没有执行init****的页面加载方法,而是直接加载了get****ById,但是我没有点击任何东西,也没有进行页面操作,只是点击菜单进入首页,应该执行init****方法,并且response的请求也是”项目名/模块名!init****.action”,但却执行另一个没有调用的方法,我曾一度认为是前台页面JS写错了,后来我去掉调用get****ById的JS后也一样的结果。我开始怀疑是后台类的继承出错了,但是当我将独立开来不带继承的时候一样,也是不执行init****只执行get****ById。
后来我实在没辙了,干脆换个名字试试,换成Query****ById,然后奇迹发生了,数据竟然正常了。
后来我百度了一下,发现很多人也有这样的问题,虽然没有找到理想的答案,但是自己记录一下。
所以我建议还是尽量不要在Struts2 的 Action 中使用getXXXXX的方法,避免出现不必要的错误
但是这个问题只出现在返回JSON数据的时候,如果是返回页面的话又不会出现这个问题
比較滿意的答案:struts2的实现原理可能就是在初始化action类之后就会调用已get和set开头的所有方法,因此导致了上面的错误。