Atea - Hero's Grave

面向对象,开源,框架,敏捷,云计算,NoSQL,商业智能,编程思想。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  40 随笔 :: 0 文章 :: 28 评论 :: 0 Trackbacks
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仍然会执行。

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

090520更新

这个问题确实很恼人,这两天又被此事折腾的崩溃。
再次提醒,在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删除就行了。
posted on 2009-02-16 20:09 Atea 阅读(380) 评论(0)  编辑  收藏 所属分类: Struts

只有注册用户登录后才能发表评论。


网站导航: