Java后台调用Flex自定义类型 (Java和AS类型转换问题)

 

最近在做一个基于Red5的流媒体交互平台,实现音频,视频,文本的交互。遇到一个问题,封装的类型要能进行转换,或许第一想到的是BlazeDS实现数据的转换,这里不是实现前台代用后台,是后台处理前台的实体,好了,实际问题。
前台有个MessageDTO,Java后台有个MessageDTO,实现对消息的封装,
package com.Model
{
[Bindable]
[RemoteClass(alias="cn.stdu.webDTO.MessageDTO")]
public class MessageDTO
{
//发言者
public var nickname:String;

//发言内容
public var msg:String;

//发言时间
public var time:Date;

//是悄悄话
public var isprivatetalk:Boolean;

//发言的对象
public var acceptnickname:String;

//粗体
public var fontWeight:String = "";

//倾斜
public var fontStyle:String="";

//下划线
public var fontTextDecoration:String="";

//颜色
public var fontColor:uint;
}
}

AS的MessagDTO,这里注意一点,属性设置成Public了,不需要设置getter/setter获取器,但是必须保证属性和Java后台相同,Java后台MessageDTO
package cn.stdu.webDTO;

import java.io.Serializable;
import java.util.Date;

public class MessageDTO implements Serializable{

/**
* The VO from DTO
*/
private static final long serialVersionUID = 1L;
//Message的一些信息
private String nickname;
private String acceptnickname;
private String msg;
private boolean isprivatetalk;
private Date time;
private String fontColor; //Flex中Color形式 uint “00ff00ff” 需要转换
private String fontStyle;
private String fontWeight;
private String fontTextDecoration;

public void setNickname(String nickname){
this.nickname=nickname;
}
public String getNickname(){
return nickname;
}
public void setAcceptnickname(String acceptnickname){
this.acceptnickname=acceptnickname;
}
public String getAcceptnickname(){
return acceptnickname;
}
public void setMsg(String msg){
this.msg=msg;
}
public String getMsg(){
return msg;
}
public void setDate(Date time){
this.time=time;
}
public Date getDate(){
return time;
}
public void setPrivatetalk(boolean isprivatetalk){
this.isprivatetalk=isprivatetalk;
}
public boolean getPrivatetalk(){
return isprivatetalk;
}
public void setMsgColor(String fontColor){
this.fontColor=fontColor;
}
public String getMsgColor(){
return fontColor;
}
public void setMsgIclined(String fontStyle){
this.fontStyle=fontStyle;
}
public String getMsgIclined(){
return fontStyle;
}
public void setMsgBold(String fontWeight){
this.fontWeight=fontWeight;
}
public String getMsgBold(){
return fontWeight;
}
public void setMsgUnderline(String fontTextDecoration){
this.fontTextDecoration=fontTextDecoration;
}
public String getMsgUnderline(){
return fontTextDecoration;
}

}
 
前台操作
this.netConnection.call("sendMessage", new Responder(function(obj:Object):void{}),this.userName,obj);
在Java后台有一个sendMessage方法:
public void sendMessage(String sender,MessageDTO message){
        
        //System.out.println(" test1 "+sender);
        //System.out.println(" test1 "+accepter);
        //System.out.println(" test1 "+param[0]);
        //System.out.println(" test2 "+param[1]);
        
        System.out.println("类型是否发生转换?"+sender+" "+message.getAcceptnickname());
        if(message.getPrivatetalk()){
            callClient(message.getAcceptnickname(),"addShowMessage",new Object[]{message,1});
        }else{
            if(message.getAcceptnickname().equals("所有人")){
                
            }else{    
            }
        }
        
        
    }
参数就传过来了,注意问题,前台AS类必须声明成 如下形式
   [Bindable]
    [RemoteClass(alias="cn.stdu.webDTO.MessageDTO")]
这句话指明和Java的具体类对应一直,同时不需要一定痛过Blazeds才实现这种转换,在Red5 中有AS和Red5中Java代码类型的对应,只是AS需要指明而已!!
强调一点,一定要确定AS和Java两个实体类型一致,今天因为这个原因,一直就传不过来参数,网上找了很多,都不是我遇到的,在此记录一下,希望在用AS和Red5开发的朋友有所帮助
!!!!
posted @ 2012-03-11 18:03  java_li  阅读(1106)  评论(0编辑  收藏  举报