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 閱讀(389) 評論(0)  編輯  收藏 所屬分類: Struts

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 广南县| 新闻| 漳平市| 长兴县| 台南市| 宜昌市| 贵州省| 东乌| 甘孜| 石林| 伊宁县| 清水县| 出国| 楚雄市| 东阳市| 新竹市| 嘉禾县| 广灵县| 新津县| 河西区| 平顶山市| 都兰县| 瑞安市| 孟津县| 行唐县| 稷山县| 长岛县| 汤阴县| 金平| 铁力市| 龙口市| 上蔡县| 衡阳市| 吉木乃县| 宁安市| 阿瓦提县| 仪陇县| 双桥区| 华容县| 闽侯县| 武威市|