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

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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 于都县| 博客| 上思县| 安福县| 颍上县| 包头市| 凤冈县| 文登市| 渭南市| 东台市| 郸城县| 方正县| 桓台县| 乌什县| 乌拉特中旗| 武城县| 大足县| 邵阳市| 大竹县| 桐梓县| 江口县| 洪湖市| 瑞丽市| 金昌市| 安仁县| 平凉市| 鄂温| 饶平县| 铜陵市| 大厂| 章丘市| 库伦旗| 临澧县| 衡水市| 阳春市| 青铜峡市| 贵港市| 呼图壁县| 嘉兴市| 海南省| 台北县|