Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Как передать объект в сервис (http://www.flasher.ru/forum/showthread.php?t=103652)

Acid2007 09.11.2007 13:27

Как передать объект в сервис
 
Привет всем.
Есть пользовательский класс. Мне нужно его заполнить и передать в веб сервис. Создаю,заполняю кидаю и получаю :

[RPC Fault faultString="Error #1069: Property comment not found on webservice.CommentDTO and there is no default value." faultCode="EncodingError" faultDetail="null"]

Это вызов :
Код:

        var cmt:CommentDTO=new CommentDTO();
            cmt.setComment("test");
            cmt.setUserName(this.UserName);
            cmt.setId(1);
            cmt.setUnitId(sid);
     

            service = ServiceLocator.getMyService();           
          var token:AsyncToken = AsyncToken(service.addComment(cmt));
            token.addResponder(new TokenResponder(getResult));

Это сам класс
Код:

package webservice
{
       
        [Bindable]
    [RemoteClass(alias="webservice.CommentDTO")]
   
public class CommentDTO  {

    private var id:Number;

    private var unitId:Number;

    private var userName:String;

    private var comment:String;


 
    public function CommentDTO(source:Object=null):void
    {
      super();
        if (source != null)
        {
            for (var i:String in source)
            {
                try
                {
                                       
                        this[i] = source[i];                   
               
                }
                catch (e:Error)
                {
                    //ignore
                }
            }
        }
    }

    public function getComment():String {
          return comment;
    }

    public function setComment(comment:String ):void {
          this.comment = comment;
    }

    public function getId():Number {
          return id;
    }

    public function setId(id:Number):void  {
          this.id = id;
    }

    public function getUnitId():Number {
          return unitId;
    }

    public function setUnitId(unitId:Number):void  {
          this.unitId = unitId;
    }

    public function getUserName():String  {
          return userName;
    }

    public function setUserName(userName:String ):void  {
          this.userName = userName;
    }

}
}


7thsky™ 12.11.2007 10:51

* А чего должен возвращать метод service.addComment (cmt)?
* Потом у тебя в классе CommentDTO - нету ни одного свойства. Это не джава :)

Первый вариант, если убрать метатаг [Bindable]
Код:

package webservice {


        [RemoteClass(alias="webservice.CommentDTO")]
       
        public class CommentDTO  {
       
                private var _id:Number;
       
                private var _unitId:Number;
       
                private var _userName:String;
       
                private var _comment:String;
       
       
       
                public function CommentDTO (source:Object=null) {
                  super();
                        if (source != null) {
                                for (var i:String in source) {
                                        try {
                                                this[i] = source[i];                   
                                        } catch (e:Error) {
                                                //ignore
                                        }
                                }
                        }
                }
       
                public function get comment():String {
                        return _comment;
                }
       
                public function set comment (comment:String):void {
                        _comment = comment;
                }
       
                public function get id():Number {
                        return _id;
                }
       
                public function set id (id:Number):void  {
                        _id = id;
                }
       
                public function get unitId ():Number {
                        return unitId;
                }
       
                public function set unitId (unitId:Number):void  {
                        _unitId = unitId;
                }
       
                public function get userName():String  {
                        return _userName;
                }
       
                public function set userName (userName:String ):void  {
                        _userName = userName;
                }
       
        }
}

Второй вариант с метатагам [Bindable]
Код:

package webservice {

        [Bindable]
        [RemoteClass(alias="webservice.CommentDTO")]

        public class CommentDTO  {

        public var id:Number;       
        public var unitId:Number;       
        public var userName:String;
        public var comment:String;
       
        public function CommentDTO (source:Object=null) {
                super();
                if (source != null) {
                        for (var i:String in source) {
                                try {
                                        this[i] = source[i];                   
                                } catch (e:Error) {
                                        //ignore
                                }
                        }
                }
        }
}

Компилятор в данном случае сам создаст на ВСЕ паблик свойства геттер/cеттеры.

то есть, свойство типа:
Код:

public var name:String
трансфортмируется в:
Код:

[Bindable(event="propertyChange")]
public function get name ():String {
        return _name;
}

public function set name (value:String):void {
        var evt:PropertyChangeEvent;
       
        if (_name != name) {
                evt = PropertyChangeEvent.createUpdateEvent (this, 'name', _name, value));
                _name = value;
                dispatchEvent (evt);
        } // end if
}


Acid2007 12.11.2007 13:20

Спасибо. Выбрал 2 вариант :)


Часовой пояс GMT +4, время: 11:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.