如何使用registerClassAlias来解决module中使用RemoteObject.docx

上传人:b****2 文档编号:17775677 上传时间:2023-08-03 格式:DOCX 页数:8 大小:17.35KB
下载 相关 举报
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第1页
第1页 / 共8页
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第2页
第2页 / 共8页
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第3页
第3页 / 共8页
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第4页
第4页 / 共8页
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第5页
第5页 / 共8页
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第6页
第6页 / 共8页
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第7页
第7页 / 共8页
如何使用registerClassAlias来解决module中使用RemoteObject.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

如何使用registerClassAlias来解决module中使用RemoteObject.docx

《如何使用registerClassAlias来解决module中使用RemoteObject.docx》由会员分享,可在线阅读,更多相关《如何使用registerClassAlias来解决module中使用RemoteObject.docx(8页珍藏版)》请在冰点文库上搜索。

如何使用registerClassAlias来解决module中使用RemoteObject.docx

如何使用registerClassAlias来解决module中使用RemoteObject

问题:

今天我在Flex的module中使用RemoteObject的方式与服务端进行AMF的远程数据调用。

第一次切换到module时是没有问题的,但第二次切换到module时,发现总是报错,无法完成远程调用。

为此困惑极了。

  我在remoting访问时,使用了一个自定义的参数类:

package VO

{

 [RemoteClass(alias="ServiceLibrary.SystemFramework.UserInfoSearchCondition")]

 public class UserInfoSearchConditionVO

 {

  public function UserInfoSearchConditionVO()

  {

  }

  public var UserName:

String;

  public var DepartmentId:

String;

 }

}

  这个定义里使用到了:

[RemoteClass(alias="ServiceLibrary.SystemFramework.UserInfoSearchCondition")]

  这就是本地对象与“远程服务端类”的别名定义,这个大家都应该知道的。

  远程调用时:

var condition:

UserInfoSearchConditionVO=new UserInfoSearchConditionVO();

condition.UserName=txtSearchUserName.text;

var resp1:

Responder=new Responder(onUserSearchCountSuccess,onUserSearchCountFaild);

nc.call("ServiceLibrary.SystemFramework.UserInfoFacade.GetUserInfoCountByCondition",resp1,condition);

  但不知道为什么,在第一次Module时加载是可以的。

在第二次加载module时,此“注册”信息会丢失。

  解决方法:

需要明确声明此注册信息,代码如下:

import .registerClassAlias;       

import mx.messaging.messages.RemotingMessage;   

import VO.UserInfoSearchConditionVO;

registerClassAlias("ServiceLibrary.SystemFramework.UserInfoSearchCondition", UserInfoSearchConditionVO);

以上的代码可以放在自己的module里,或者也可以直接放在Application上,声明一次也就可以了,子Module不需要更申明了。

  最后的代码我帖出来,如果你能看懂就最好了,看不懂我也没办法了:

xml version="1.0" encoding="utf-8"?

>

Module xmlns:

fx="

     xmlns:

s="library:

//

     xmlns:

mx="library:

// layout="vertical" width="100%" height="100%"   

     creationComplete="module1_creationCompleteHandler(event)" >

Script>

 

[CDATA[

  import mx.events.ListEvent;

  import AppConfig.Connection;

  

  import mx.events.FlexEvent; 

  import mx.controls.Alert;

  public var nc:

NetConnection;  

     import mx.collections.ArrayCollection; 

  public var pageCount:

int=10;

  public var curPage:

int=0;

  public var totalCount:

int=0;

  

  //这里就是需要申明注册别名的地方。

  import .registerClassAlias;      

  import mx.messaging.messages.RemotingMessage;  

  import VO.UserInfoSearchConditionVO;

  registerClassAlias("ServiceLibrary.SystemFramework.UserInfoSearchCondition", UserInfoSearchConditionVO);

  

  protected function module1_creationCompleteHandler(event:

FlexEvent):

void

  {

   // TODO Auto-generated method stub

   nc=new NetConnection();

   nc.objectEncoding=ObjectEncoding.AMF3;

   var gatewayUrl:

String =AppConfig.Connection.getInstance().connectionString;

   

   nc.addEventListener(NetStatusEvent.NET_STATUS,netStateHandle);

   nc.connect(gatewayUrl);

  }

  

  protected function netStateHandle(evt:

NetStatusEvent):

void

  {

   Alert.show("连接出错了!

","出错了");

  }

  protected function btnSearch_clickHandler(event:

MouseEvent):

void

  {

   // TODO Auto-generated method stub

   

   

   

   BindGrid();

   

   

  }

  

  protected function BindGrid():

void

  {

   

   

   

   var condition:

UserInfoSearchConditionVO=new UserInfoSearchConditionVO();

   condition.UserName=txtSearchUserName.text;

   

   var resp1:

Responder=new Responder(onUserSearchCountSuccess,onUserSearchCountFaild);

   nc.call("ServiceLibrary.SystemFramework.UserInfoFacade.GetUserInfoCountByCondition",resp1,condition);

   

   

   var resp2:

Responder=new Responder(onUserSearchSuccess,onUserSearchFaild);

   nc.call("ServiceLibrary.SystemFramework.UserInfoFacade.GetUserInfoByCondition",resp2,condition,curPage,pageCount);

  }

  

  protected function onUserSearchCountSuccess(re:

Object):

void{

   this.totalCount= re as int;

   if(curPage>0)

    this.btnPrev.visible=true;

   else

    this.btnPrev.visible=false;

   

   if((curPage+1) * pageCount >=totalCount)

    this.btnNext.visible=false;

   else

    this.btnNext.visible=true;

  }

  protected function onUserSearchCountFaild(re:

String):

void{

   Alert.show("获取数据出错!

","出错了");

  }

  

  protected function onUserSearchSuccess(re:

ArrayCollection):

void{

   gridUser.dataProvider =re;

  }

  protected function onUserSearchFaild(re:

String):

void{

   Alert.show("获取数据出错!

","出错了");

  }

  

  protected function btnNext_clickHandler(event:

MouseEvent):

void

  {

   // TODO Auto-generated method stub

   curPage++;

   BindGrid();

  }

  

  

  protected function btnPrev_clickHandler(event:

MouseEvent):

void

  {

   // TODO Auto-generated method stub

   curPage--;

   BindGrid();

   

  }

  

  

  protected function gridUser_itemClickHandler(event:

ListEvent):

void

  {

   // TODO Auto-generated method stub

   this.currentState="edit";

  }

  

 ]]>

Script>

 

states>

  

State name="view"/>

  

State name="edit"/>

 

states>

 

HGroup width="100%" height="100%">

  

  

Panel width="250" height="100%" title="用户管理">

   

layout>

    

VerticalLayout/>

   

layout>

   

HGroup width="100%" height="29">

    

TextInput id="txtSearchUserName" height="29" width="162"/>

    

Button id="btnSearch" label="查询mailto:

"%20icon="@Embed(source='assets/images/search.png')" height="29" labelPlacement="right" click="btnSearch_clickHandler(event)">

     

    

Button>

   

HGroup>

   

HRule width="100%"/>

   

ButtonBar height="20" height.view="32">

    

dataProvider>

     

Object label="新增mailto:

"%20icon="@Embed(source='assets/images/Add.png')" />

     

Object label="删除mailto:

"%20icon="@Embed(source='assets/images/Remove.png')" />

    

dataProvider>

   

ButtonBar>

   

DataGrid id="gridUser" width="100%" height="100%" itemClick="gridUser_itemClickHandler(event)">

    

columns>

     

DataGridColumn headerText="用户名" dataField="UserName"/>

     

    

columns>

   

DataGrid>

   

HGroup x="393" y="264" width="100%" height="26">

    

LinkButton label="上一页" id="btnPrev" visible="false" click="btnPrev_clickHandler(event)"/>

    

LinkButton label="下一页" id="btnNext" visible="false" click="btnNext_clickHandler(event)"/>

   

HGroup>

  

Panel>

  

VRule height="100%" baseColor="#A75757"/>

  

Panel id="pnlUserEdit" horizontalCenter="0" verticalCenter="0" width="100%" height="100%" dropShadowVisible="true"  title="用户信息"

      includeIn="edit">

   

layout>

    

VerticalLayout/>

   

layout>

   

   

Form width="100%" height="100%">

    

FormItem label="帐号:

" required="true" >

     

TextInput  id="account" >

      

     

TextInput>

    

FormItem>

    

FormItem label="密码:

" required="true">

     

TextInput id="pwd" displayAsPassword="true">

      

     

TextInput>

     

    

FormItem>

    

FormItem>

     

CheckBox id="chkRememberMe" selected="true" label="下次记住我">

      

     

CheckBox>

    

FormItem>

    

FormItem horizontalAlign="right">

     

Button label="登录" id="btnSave"  >

      

     

Button>

    

FormItem>

    

   

Form>

   

  

Panel>

 

HGroup>

Module>

  最后,我再主张一下我的设计的原则:

  在客户端与服务端进行远程数据调用时,我不太主张采用“简单参数”模式,比如查询用户功能吧,我可以使用username,deparmentId...等等参数来进行参数调用,但这样有个扩展性问题:

那就是当以后要添加“查询条件”时,不得不修改接口。

这就是会导致客户端要修改N个调用地方,服务端也要进行接口修改,这就会带来很大的扩展问题。

  因此,我建议可以自定义一个“Condition查询类”与“服务端”的相对应,这样接口的参数就只需要一个,而且类型不变。

  以后如果要扩展“查询条件”时,只需要在“客户端”添加一个属性,并赋值就OK了。

在“服务端”则也只要添加属性,并修改实现代码就OK了,不再需要修改两端的“接口”了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2