转:在struts2的Action中慎起get打头的函数

struts2 Action里面的getter方法会在Action结束后被自动调用,例如有此情况:

<package extends="struts-default">

<action name="MyAction">

<action name="AnotherAction" method="getSomething">

...

在Action中

public String execute(){

System.out.println("execute");

return SUCCESS;

}

public String getA() {

System.out.println("getA");

return SUCCESS;

}

public String geta() {

System.out.println("geta");

return SUCCESS;

}

public String getaa() {

System.out.println("getaa");

return SUCCESS;

}

public String getaA() {

System.out.println("getaA");

return SUCCESS;

}

public String getB() {

System.out.println("getB");

return SUCCESS;

}

public String gotA() {

System.out.println("gotA");

return SUCCESS;

}

当调用MyAction的时候,输出结果为:

execute

geta

getaA

getaa

getB

也就是说,即使你没有调用AnotherAction,getSomething仍然会执行。

---------------------------------------------------------------------------

这个问题确实很恼人,这两天又被此事折腾的崩溃。

再次提醒,在struts2的Action中慎起get打头的函数!

出错的整个过程是这样的(错的花了..):

在测试程序的过程中,发现后台Hibernate不时的发生读取脏数据的情况。

为此专门编写了测试文件进行测试,并没有发现读取脏数据的现象。众所周知Session不是线程安全的,可系统是用ThreadLocal来管理Session的,按说不应该出现这个问题。

我也曾怀疑过是sf缓存出的错,可去掉缓存后还是有问题。

在打开了Session创建和销毁的Log后,发现程序在Action返回后,又创建了新的Session(没有关闭)。

注:系统在Action层对Service层做了IOC,在Service层对DAO层做了IOC。

结果就是,Action结束时调用了getXXXService函数,而又神奇的调到了当前Service所有get打头的函数。

最后的解决办法是,此处的IOC并不需要getter,把getter删除就行了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值