日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java vo的使用_使用VO传递参数的设计 | 学步园

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java vo的使用_使用VO传递参数的设计 | 学步园 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在使用openamf傳參到j(luò)ava后臺(tái)時(shí),有時(shí)需要傳遞大量的參數(shù),那么在前臺(tái)的時(shí)候我們常用的方法是把參數(shù)設(shè)置給一個(gè)對(duì)象,通過openamf傳到后臺(tái)轉(zhuǎn)成Map后,我們通過Map的key值去取相應(yīng)的參數(shù)。如下所示例:

varrequest:Object?=newObject();

request.coNbr=txtCoNbr.text;

request.servNbr?=?txtServNbr.text

Java后臺(tái)在接收到這個(gè)參數(shù)后去從map中提取這些參數(shù):

publicMap?find(?Map?request)throwsException?{

String?coNbr?=?(String)request.get(“coNbr”);

String?servNbr?=?(String)request.get(“servNbr”);

}

而且如果openamf的序列化的force-lower-case-keys參數(shù)設(shè)置為true時(shí),map在get鍵值時(shí)還需要用小寫:

String coNbr = (String)request.get(“conbr”);

這樣,給代碼的開發(fā)維護(hù)造成一定的困難,不容易發(fā)現(xiàn)其中的錯(cuò)誤。特別是在需要傳遞很多參數(shù)時(shí),前臺(tái)設(shè)置和解析這些參數(shù)也是麻煩的事,對(duì)前臺(tái)的傳遞參數(shù)前的驗(yàn)證也是不容易去做。

因此考慮使用VO來進(jìn)行參數(shù)傳遞,VO中的屬性包括一個(gè)傳到后臺(tái)的參數(shù)所需要幾個(gè)屬性,參數(shù)名稱、參數(shù)描述、參數(shù)值、動(dòng)作類型、是否必須等等。

其中的動(dòng)作類型是預(yù)留的,用來表示如果要在后臺(tái)數(shù)據(jù)庫(kù)中查詢是執(zhí)行“=”還是“IN”的操作,是否必須是用來在前臺(tái)進(jìn)行驗(yàn)證時(shí)需要的。

Flex前臺(tái)和Java后臺(tái)設(shè)計(jì)相同結(jié)構(gòu)的VO,并在openamf-config.xml中配置類型的自動(dòng)映射。

然后前臺(tái)和后臺(tái)分別提供個(gè)解析參數(shù)的方法,就可以通用了,可以傳遞所需要的參數(shù)。

這樣做的好處主要有下面幾點(diǎn):

l統(tǒng)一參數(shù)傳遞的方法

l提供統(tǒng)一的前臺(tái)參數(shù)簡(jiǎn)單驗(yàn)證

l簡(jiǎn)化參數(shù)傳遞時(shí)的設(shè)置

l避免openamf序列化時(shí)的大小寫問題

下面是具體的設(shè)計(jì)思路

1.1AS的條件VO對(duì)象設(shè)計(jì)前后臺(tái)VO對(duì)象

1.1.1AS的條件VO對(duì)象

提供了條件所需要的幾個(gè)基本屬性,并提供了靜態(tài)的參數(shù)解析方法,前面的常量是需要傳遞到后臺(tái)的參數(shù),大小寫區(qū)分便于理解。傳遞到Java后臺(tái)的條件是個(gè)VO對(duì)象數(shù)組(Array),這樣java就能直接解析成ArrayList,ArrayList中是經(jīng)過openamf類映射后的Java VO對(duì)象。

代碼如下:

packagebss.flex.vo

{

importbss.base.control.AlertFX;

importbss.base.util.StringUtils;

/**

*?查詢條件VO

*?用來保存單個(gè)查詢條件

*

*

*/

publicclassConditionVO

{

publicstaticconstPROD_SPEC:String?="prodSpecId";

publicstaticconstORDER_TYPE:String?="orderTypeId";

publicstaticconstCONBR:String?="coNbr";

publicstaticconstACC_NBR:String?="servNbr";

publicstaticconstJOB_SPEC:String?="currentJobSpecId";

publicstaticconstBSS_ORDER_STATE:String?="orderStat";

publicstaticconstAREA:String?="areaId";

publicstaticconstCUST_NAME:String?="custName";

publicstaticconstBIND_NBR:String?="bindNbr";

publicstaticconstCODATE_START:String?="applDateStart";

publicstaticconstCODATE_END:String?="applDateEnd";

privatevar_name:String;

privatevar_desc:String;//屬性描述

privatevar_value:String;

privatevar_action:String?="?=?";//操作符,例如是?=?還是?IN

privatevar_isRequired:Boolean?=true;//是否必須有值

publicfunctionConditionVO()

{

//TODO:?implement?function

}

publicfunctionset?name(value:String):void{

//desc默認(rèn)設(shè)置和name一樣

if(desc?==null){

this._desc?=?value;

}

this._name?=?value;

}

publicfunctionget?name():String{

returnthis._name;

}

publicfunctionset?desc(value:String):void{

this._desc?=?value;

}

publicfunctionget?desc():String{

returnthis._desc;

}

publicfunctionset?value(val:String):void{

this._value?=?val;

}

publicfunctionget?value():String{

returnthis._value;

}

publicfunctionset?action(value:String):void{

this._action?=?value;

}

publicfunctionget?action():String{

returnthis._action;

}

publicfunctionset?isRequired(value:Boolean):void{

this._isRequired?=?value;

}

publicfunctionget?isRequired():Boolean{

returnthis._isRequired;

}

//驗(yàn)證查詢條件

privatestaticfunctionvalidate(aryCond:Array):Boolean{

for(vari:int=0;i

varitem:ConditionVO?=?aryCond[i]?as?ConditionVO;

if(item.isRequired?&&?StringUtils.isEmpty(item.value)){

AlertFX.error(item.desc+"必須選擇或輸入值!",null,"數(shù)據(jù)驗(yàn)證");

returnfalse;

}

}

returntrue;

}

//解析查詢請(qǐng)求條件

publicstaticfunctionparseRequest(ary:Array):Object{

varrequest:Object?=newObject();

if(ary!=null){

for(vari:int=?0;i

varitem:ConditionVO?=?ary[i]?as?ConditionVO;

request[item.name]?=?item.value;

}

}

returnrequest;

}

//從查詢列表中搜索指定的條件并返回

publicstaticfunctionsearchConditionValue(ary:Array,name:String):String{

if(ary!=null){

for(vari:int=?0;i

varitem:ConditionVO?=?ary[i]?as?ConditionVO;

if(item.name?==?name){

returnitem.value;

}

}

}

returnnull;

}

//詳情輸出

publicfunctiontoString():String{

returnthis._name?+"?=?"+this._value+

"/n?desc?=?"+_desc+

"/n?isRequired?=?"+_isRequired+

"/n?action?=?"+this._action;

}

}

}

1.1.2Java的條件VO對(duì)象

對(duì)象結(jié)構(gòu)基本同AS的VO對(duì)象,代碼如下:

packagebss.sa.datastruct;

importjava.io.Serializable;

publicclassConditionVOimplementsSerializable?{

/**

*

*/

privatestaticfinallongserialVersionUID?=?1L;

privateString?name;

privateString?desc;

privateString?value;

privateString?action;

privatebooleanisRequired;

publicConditionVO()?{

}

publicString?getAction()?{

returnaction;

}

publicvoidsetAction(String?action)?{

this.action?=?action;

}

publicString?getDesc()?{

returndesc;

}

publicvoidsetDesc(String?desc)?{

this.desc?=?desc;

}

publicbooleangetIsRequired()?{

returnisRequired;

}

publicvoidsetIsRequired(booleanisRequired)?{

this.isRequired?=?isRequired;

}

publicString?getName()?{

returnname;

}

publicvoidsetName(String?name)?{

this.name?=?name;

}

publicString?getValue()?{

returnvalue;

}

publicvoidsetValue(String?value)?{

this.value?=?value;

}

publicString?toString(){

returngetName()+"="+getValue()+","+

"desc="+getDesc()+","+

"action="+getAction()+","+

"isRequired="+getIsRequired()+"/n";

}

}

1.3配置AS對(duì)象和Java對(duì)象的映射

這個(gè)需要在openamf-config.xml中添加如下配置:

bss.sa.datastruct.ConditionVO

bss.flex.vo.ConditionVO

1.4提供As參數(shù)解析方法

可以為As的VO對(duì)象添加一些有用的靜態(tài)方法,用于解析其中的參數(shù)

1.5提供Java參數(shù)解析方法

這里是指解析從Flex前臺(tái)傳遞來的VO列表對(duì)象,代碼如下:

//解析前臺(tái)傳來的參數(shù)

publicString?parseCondition(ArrayList?ary,String?condName){

if(ary!=null){

for(inti=0;i

ConditionVO?vo?=?(ConditionVO)ary.get(i);

if(vo.getName().equals(condName)){

returnvo.getValue();

}

}

}

returnnull;

}

1.6簡(jiǎn)單的前臺(tái)數(shù)據(jù)驗(yàn)證

其中的getConditions方法是往Array里添加ConditionVO對(duì)象的,前臺(tái)需要傳遞的條件。部分代碼如下:

//取得查詢條件

privatefunctiongetConditions():Array{

varconditionList:Array?=newArray();

if(chkProdSpec.selected){

varitem:ConditionVO?=newConditionVO();

item.name?=?ConditionVO.PROD_SPEC;

item.value?=?prodSpec.value;

conditionList.push(item);//往列表里添加條件VO

}

if(chkOrderType.selected){

varitem:ConditionVO?=newConditionVO();

item.name?=?ConditionVO.ORDER_TYPE;

item.value?=?orderType.value;

conditionList.push(item);

}

下面這個(gè)方法是查詢前的數(shù)據(jù)驗(yàn)證:

privatefunctionqueryHandler(event:*):void{

//確認(rèn)后調(diào)用findBssOrder()方法

if(getConditions().length==0){

AlertFX.confirm("您沒有選擇任何查詢條件,可能會(huì)比較慢,要繼續(xù)查詢嗎?",closeHandler,"查詢條件驗(yàn)證");

}else{

if(ConditionVO.validate(this.getConditions())){

findBssOrder();

}

}

}

1.7示例代碼

下圖是個(gè)示例,查詢條件部分有四個(gè)條件,只選擇了其中的兩個(gè):

獲取其中參數(shù),并放到列表中,見上面的getConditions()方法

傳遞參數(shù):

vararyCond:Array?=this.getConditions();

varrequest:Object?=newObject();

request.conditions?=?aryCond;//參數(shù)列表傳遞

logger.debugMore("request",request);

看下打印的日志:

[ 2008/11/25 09:43:35- debug ] request

(Object)#0

conditions = (Array)#1

[0] (bss.flex.vo::ConditionVO)#2

action = " = "

desc = "prodSpecId"

isRequired = true

name = "prodSpecId"

value = "2"

pageno = 10

pagenum = 1

[ 2008/11/25 09:45:12- debug ] request

(Object)#0

conditions = (Array)#1

[0] (bss.flex.vo::ConditionVO)#2

action = " = "

desc = "prodSpecId"

isRequired = true

name = "prodSpecId"

value = "2"

[1] (bss.flex.vo::ConditionVO)#3

action = " = "

desc = "coNbr"

isRequired = true

name = "coNbr"

value = "82200711127777777777"

pageno = 10

pagenum = 1

可以看到conditions里包含了選擇的兩個(gè)條件VO

Java后臺(tái)參數(shù)解析:

ArrayList conditions = (ArrayList)request.get("conditions");

//解析需要的參數(shù)

String servNbr = parseCondition(conditions,"servNbr");

String coNbr = parseCondition(conditions,"coNbr");

parseCondition方法見上面第4點(diǎn)說明,解析參數(shù)時(shí)區(qū)分大小寫。

1.7小結(jié)

參數(shù)傳遞是經(jīng)常需要面對(duì)的問題,如何方便地解析參數(shù)便于我們進(jìn)行前后臺(tái)的開發(fā),提高開發(fā)效果,不要被傳遞參數(shù)搞得頭疼。

總結(jié)

以上是生活随笔為你收集整理的java vo的使用_使用VO传递参数的设计 | 学步园的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。