如何使BlazeDS名称转换适用于以小写字母开头,后跟大写字母的属性?

时间:2011-06-06 09:12:09

标签: flex actionscript-3 blazeds amf

当此名称以小写字母后跟大写字母开头时,我对BlazeDS应用于属性名称的转换有些麻烦。

我有一个类似于此的ActionScript类:

package as.pkg {

    [RemoteClass(alias="java.pkg.Example")]
    public class Example {
        private var mXRatio:Number;

        public function get xRatio():Number {
            return mXRatio;
        }

        public function set xRatio(r:Number):void {
            mXRatio = r;
        }
    }
}

然后我在服务器上有等效的Java类:

package java.pkg;

public class Example {
    private Double mXRatio;

    public Double getXRatio() {
        return mXRatio;
    }

    public void setXRatio( Double r ) {
        mXRatio = r;
    }
}

将ActionScript中的实例发送到Java非常合适。但是,当实例从Java发送到ActionScript时,会显示以下错误:

  

ReferenceError:错误#1056:无法在as.pkg.Example上创建属性XRatio。

为什么BlazeDS不会转换XRatio的X?我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

BlazeDS在序列化时使用反射将值注入属性。

因此,您的属性(公共getter / setter对或公共变量)必须具有完全相同的名称,否则您将收到序列化错误,如上所述。

试试这个,它应该没问题:

package as.pkg {

    [RemoteClass(alias="java.pkg.Example")]
    public class Example {
        private var mXRatio:Number;

        public function get XRatio():Number { //uppercase X i.s.o lowercase x
            return mXRatio;
        }

        public function set XRatio(r:Number):void { //uppercase X i.s.o lowercase x
            mXRatio = r;
        }
    }
}

干杯