【问题标题】:How to make BlazeDS name conversion to work for properties beginning with a lower-case letter followed by an upper-case one?如何使 BlazeDS 名称转换适用于以小写字母开头后跟大写字母的属性?
【发布时间】:2011-06-06 09:12:08
【问题描述】:

当属性名称以小写字母开头后跟大写字母时,我在 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?我怎样才能避免这种情况?

【问题讨论】:

    标签: apache-flex actionscript-3 blazeds amf


    【解决方案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;
            }
        }
    }
    

    干杯

    【讨论】:

    • 实际上,如果我在 ActionScript 中使用 xratio 并在 Java 中使用 getXratio(),它会很好地工作,即使这不是完全相同的名称。 BlazeDS 可以很好地处理以 AS 中的小写字母和 Java 中的大写字母开头的属性,这是经典的命名约定,但在上面描述的情况下并非如此。
    猜你喜欢
    • 2022-11-23
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多