2012-07-01 4 views
0

Я использую петрушку 3 с Flex 4 (AIR) для одного из моих приложений. Когда я делаю удаленный вызов, я отправляю событие, которое доходит до командного класса, а затем до уровня сервиса уровня Java. До сих пор все работает нормально. Уровень Java вызывает некоторый вызов и т. Д. Возвращает результат, но обработчик результата (или обработчик ошибок) не получает контроль.Обработчик результата не получает контроль в петрушке 3, используемый с Flex 4 (BlazeDS + Spring)

Project 
      bin-debug 
      libs 
       parsley-core-3.0.0.swc 
       parsley-flex-3.0.0.swc 
       parsley-xml-3.0.0.swc 
       spicelib-commands-3.1.1.swc 
       spicelib-reflect-3.0.0.swc 
       spicelib-util-3.1.0.swc 
       spicelib-xml-mapper-3.0.2.swc 
     Main.mxml 
     ProjectEvent.as 
      LoadProjectsCommand 
      ProjectPM.as 

и другие материалы.

Класс команды получает контроль, а также может вызвать службу java. Код выглядит следующим образом:

package 
{ 
    import mx.collections.ArrayCollection; 
    import mx.controls.Alert; 
    import mx.rpc.AsyncToken; 
    import mx.rpc.events.FaultEvent; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.remoting.RemoteObject; 

    /*http://www.spicefactory.org/parsley/docs/3.0/manual/managedcommands.php*/ 
    public class LoadProjectsCommand 
    { 
     [Inject(id="projectRemoteService")] 
     public var projectRemoteService:RemoteObject; 

     [Inject] 
     public var model:ProjectScreenPM; 

     public function execute(event:ProjectEvent):AsyncToken 
     { 
      return projectRemoteService.getAllProjectsWithSprintsInSystem() as AsyncToken; 
     } 

     public function result(event:ResultEvent):void 
     { 
      Alert.show("Result"); 
     } 
     public function fault(event:FaultEvent):void 
     { 
      Alert.show("Fault in retrieving projects","Error"); 
     } 
    } 
} 

Я проверил все, что хорошо в вызове службы Java. Может ли кто-нибудь помочь мне?

ответ

1

Возможно, вы обнаружили, что метод result не вызывается, потому что команда выдает ошибку.

Метод отказа в команде петрушки называется error, а не fault, поэтому ваш метод fault никогда не будет вызван.

Переименуйте метод fault в error и посмотрите, что изменится.

+0

Я нашел ответ. В петрушке 3 мне также нужно добавить ответчика к токену, и теперь он работает нормально. Но совершенно удивительно, что этот код отлично работает в петрушке 2.4. –

+0

Если вы вручную добавляете ответчика, то это ваш ответчик, который вызывает метод сбоя, а не Parsley. Это не подходящее решение, так как это приведет к тому, что команда не будет GC'd, что может привести к утечке памяти. Кроме того, другие обработчики '[CommandResult]' или '[CommandError]' не будут вызываться. Я предлагаю вам опубликовать вопрос на форумах парслингов, так как я не сделал обновление с 2.4 до 3. –

+0

Спасибо, Марти, я разместил его на форуме петрушки. –