在使用openamf传参到java后台时,有时需要传递大量的参数,那么在前台的时候我们常用的方法是把参数设置给一个对象,通过openamf传到后台转成Map后,我们通过Map的key值去取相应的参数。如下所示例:
varrequest:Object =newObject();
request.coNbr=txtCoNbr.text;
request.servNbr = txtServNbr.text
…
Java后台在接收到这个参数后去从map中提取这些参数:
publicMap find( Map request)throwsException {
String coNbr = (String)request.get(“coNbr”);
String servNbr = (String)request.get(“servNbr”);
}
而且如果openamf的序列化的force-lower-case-keys参数设置为true时,map在get键值时还需要用小写:
String coNbr = (String)request.get(“conbr”);
这样,给代码的开发维护造成一定的困难,不容易发现其中的错误。特别是在需要传递很多参数时,前台设置和解析这些参数也是麻烦的事,对前台的传递参数前的验证也是不容易去做。
因此考虑使用VO来进行参数传递,VO中的属性包括一个传到后台的参数所需要几个属性,参数名称、参数描述、参数值、动作类型、是否必须等等。
其中的动作类型是预留的,用来表示如果要在后台数据库中查询是执行“=”还是“IN”的操作,是否必须是用来在前台进行验证时需要的。
Flex前台和Java后台设计相同结构的VO,并在openamf-config.xml中配置类型的自动映射。
然后前台和后台分别提供个解析参数的方法,就可以通用了,可以传递所需要的参数。
这样做的好处主要有下面几点:
l统一参数传递的方法
l提供统一的前台参数简单验证
l简化参数传递时的设置
l避免openamf序列化时的大小写问题
下面是具体的设计思路
1.1AS的条件VO对象设计前后台VO对象
1.1.1AS的条件VO对象
提供了条件所需要的几个基本属性,并提供了静态的参数解析方法,前面的常量是需要传递到后台的参数,大小写区分便于理解。传递到Java后台的条件是个VO对象数组(Array),这样java就能直接解析成ArrayList,ArrayList中是经过openamf类映射后的Java VO对象。
代码如下:
packagebss.flex.vo
{
importbss.base.control.AlertFX;
importbss.base.util.StringUtils;
/**
* 查询条件VO
* 用来保存单个查询条件
*
*
*/
publicclassConditionVO
{
publicstaticconstPROD_SPEC:String ="prodSpecId";
publicstaticconstORDER_TYPE:String ="orderTypeId";
publicstaticconstCONBR:String ="coNbr";
publicstaticconstACC_NBR:String ="servNbr";
publicstaticconstJOB_SPEC:String ="currentJobSpecId";
publicstaticconstBSS_ORDER_STATE:String =&#