首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-09-09 
转:在struts2的Action中慎起get打头的函数struts2 Action里面的getter方法会在Action结束后被自动调用,例

转:在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删除就行了。

热点排行