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

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


          網站導航:
           
          主站蜘蛛池模板: 城固县| 正镶白旗| 社旗县| 宕昌县| 沁源县| 孝感市| 巴里| 南京市| 古交市| 青川县| 扬中市| 陇西县| 通州区| 济源市| 依安县| 文登市| 安西县| 长子县| 桓仁| 介休市| 大悟县| 汉川市| 项城市| 罗田县| 本溪市| 凯里市| 水富县| 聂拉木县| 资中县| 宣恩县| 庄浪县| 临沂市| 金秀| 平谷区| 镇平县| 苏尼特右旗| 房山区| 临泉县| 紫金县| 桦南县| 阿拉善盟|