【问题标题】:Flex Remoting - Change of Object Names during Data SerializationFlex Remoting - 数据序列化期间对象名称的更改
【发布时间】:2012-10-08 10:35:01
【问题描述】:

在将数据(数据序列化)从 Java(服务器)传递到 Flex(客户端)时,对象的名称发生了变化。请在下面找到详细信息。

Java Pojo

public class MSC
{
   public String Column1;
   public String Column2;
}

Java 远程类

public List<MSC> getData()
{
   MSC pojoMSC = new MSC;
   pojoMSC.Column1 = "1";
   pojoMSC.Column2 = "2";

   List<MSC> listMSC = new ArrayList<MSC>;
   listMSC.add(pojoMSC);
   return listMSC;
}

Flex 结果处理程序

var ReturnData:ArrayColelction = event.result as ArrayCollection;

当我调试并观察表达式 ReturnData 时,我得到以下信息

ReturnData
  [0]
     column1   "1"
     column2   "2"

虽然过程全部正确,值也全部正确,但是ReturnData的0索引的对象名称由Column1改为column1,Column2改为column2。

我认为这是由 Flex AMF 数据序列化完成的。如何防止它,以便我可以将 Coulmn1 作为 Column1 等。如果不是,它背后的概念是什么。

提前致谢。

【问题讨论】:

    标签: java apache-flex


    【解决方案1】:

    是的,这是因为 BlazeDS 使用 Java Bean 命名约定。

    首先,在 Java 中,类的成员(字段、方法)不能以大写字母开头。

    其次,遵循封装原则并将您的字段设为私有并使用 getter/setter 对其进行变异是一种很好的做法。

    在你的情况下是这样的:

    public class MSC
    {
       private String column1;
       private String column2;
    
       public String getColumn1(){
          return column1;
       }
    
       public void setColumn1(String value) {
          column1 = value;
       }  
    
       public String getColumn2(){
          return column2;
       }
    
       public void setColumn2(String value) {
          column2 = value;
       } 
    }
    

    但一般来说:不要以大写字母开头变量。

    【讨论】:

    • 第一个问题:字段名称以大写字母开头对您来说有多重要?因为还有一个 Flex/ActionScript 编码约定 (sourceforge.net/adobe/flexsdk/wiki/Coding%20Conventions),它不允许以大写字母开头命名变量和字段。
    • 嗯,这并不重要,但必须根据 CodingConvention 更改它们。感谢您的及时回复,将参考文档。
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多