2011-07-07 67 views
1

我認爲我繼承了錯誤的代碼,這裏是處理:在我的命令中,我爲遠程對象創建一個本地變量,然後調用一個方法。結果,如果沒有數據,我啓動一個計時器。該計時器每隔2秒廣播一個事件,不斷調用該命令,直到返回數據。然後定時器停止。重複的Flex會話導致我的多個請求與不同的JSESSIONIDs

我們看到的是該方法只返回一次數據,然後下一次不返回(重複Flex會話錯誤)。它基本上交替。如果我們點擊的速度非常快,有時我們會有兩個連續工作。

有時,Java開發人員會看到這些請求以不同的JSESSIONID返回。我相信這會導致重複的Flex會話錯誤。

這是我繼承的錯誤代碼嗎?還有另外一種方法可以解決這個問題嗎?

我正在使用Cairngorm;這裏是執行命令。

public function execute(event:CairngormEvent):void 
    { 
     ruleName = (event as FetchReportEvent).ruleName; 
     var ro:RemoteObject = ServiceLocator.getInstance().getRemoteObject("quantRemoteObject"); 

     if (model.guid != null) 
     { 
      var call:AsyncToken = ro.generateReportResultSetGet(model.guid); 
      call.addResponder(this); 
     } 
     ro.requestTimeout 
    } 

public function result(data:Object):void 
    { 
     var resultEvent:ResultEvent = data as ResultEvent; 
     var ac:ArrayCollection = resultEvent.result as ArrayCollection; 
     timer.stop(); 

     if (ac == null || ac.length == 0) 
     { 
      Alert.show("Received unknown data format from the server. Unable to generate report"); 
      model.currentMode = RulesModelLocator.VIEW_MODE; 
      model.guid = null; 
     } 
     else if (ac.getItemAt(0) == false) 
     { 
      // no data yet, start the timer for next try 
      // make sure not cancelled 
      if (model.guid != null) 
      { 
       timer.addEventListener(TimerEvent.TIMER, timerHandler, false, 0, false); 
       timer.start(); 
      } 
      else 
      { 
       timer.stop(); 
      } 
     } 
    } 

private function timerHandler(event:TimerEvent):void 
    { 
     var fetchReportEvent:FetchReportEvent = new FetchReportEvent(); 
     fetchReportEvent.ruleName = ruleName; 
     fetchReportEvent.dispatch(); 
    } 

感謝您的任何有用的提示!

+0

顯示代碼。你如何使用命令?你在使用框架嗎? –

+0

我已經用代碼更新了帖子。我正在使用Cairngorm,timerHandler()方法中的事件廣播只是調用此命令的execute()方法。 – fumeng

+0

你的活動如何派發?而不是在顯示列表?! –

回答

1

請閱讀this答案。讓我知道你是否仍然有問題。

+0

雖然已經很老了,但您可能想擴大您的答案,或者如果確實重複,請投票結束。謝謝! –

相關問題