我试图从flex mxml / action脚本中读取来自java web服务的数据,好像是调用ie请求/响应成功但是当无法从响应中读取值时,请帮助MXML代码如下:
Unable to print the value from :
var outA:OutputA_type = ccxc.OutputA;
trace(outA);
var aaa:String = outA.toString();
Alert.show(aaa)
它打印为[Object OutputA)_Type]
但不是所需的值。但是在flex builder测试连接中,我也看到了正确的值/响应。
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:number1="services.number1.*"
xmlns:testws="services.testws.*"
minWidth="955" minHeight="850" creationComplete="initApp()">
<!-- Styles ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<fx:Style source="Styles.css"/>
<!-- Script ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.collections.ArrayList;
import mx.controls.Alert;
import mx.events.CalendarLayoutChangeEvent;
import mx.rpc.AsyncToken;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.utils.ObjectUtil;
import services.testws.Testws;
import valueObjects.OutputA_type;
import valueObjects.Parameters_type;
import valueObjects.TestParameters;
import valueObjects.TestResult_type;
private function initApp():void {
var testWebS:Testws = new Testws();
var testParam:TestParameters = new TestParameters();
testParam.ParamA = 2;
testParam.ParamB = 3;
var token:AsyncToken = testWebS.test(testParam);
token.addResponder(new mx.rpc.Responder(result, fault));
}
private function result(event:ResultEvent) : void {
trace(event.result);
var strData:TestResult_type = event.result as TestResult_type;
var ccxc:Parameters_type = strData.Parameters;
var outA:OutputA_type = ccxc.OutputA;
trace(outA);
var aaa:String = outA.toString();
Alert.show(aaa.toString());
}
public function fault(event : FaultEvent) : void {
Alert.show("Failed Condition Fault Exception");
}
]]>
</fx:Script>
<!-- Declarations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<fx:Declarations>
</fx:Declarations>
<!-- UI components ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<s:Label x="10" y="34"
width="690" height="40"
text="Employee Portal: Vehicle Request Form"
styleName="titleHeader"/>
<s:Form x="10" y="70">
<s:FormItem label="Input a:">
<s:TextInput id="a"/>
</s:FormItem>
<s:FormItem label="Input b:">
<s:TextInput id="b"/>
</s:FormItem>
<s:FormItem>
<s:Button id="submitButton"
label="Submit Request" click="submitButton_clickHandler(event)"/>
</s:FormItem>
</s:Form>
</s:Application>
SOAP-UI Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tes="http://tempuri.org/testws">
<soapenv:Header/>
<soapenv:Body>
<tes:test>
<tes:parameters>
<!--Optional:-->
<tes:ParamA>3</tes:ParamA>
<!--Optional:-->
<tes:ParamB>1</tes:ParamB>
</tes:parameters>
</tes:test>
</soapenv:Body>
</soapenv:Envelope>
SOAP-UI Response:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<m:testResponse xmlns:m="http://tempuri.org/testws">
<m:testResult>
<axis2ns794:Parameters xmlns:axis2ns794="http://tempuri.org/testws">
<axis2ns795:OutputA description="" xmlns:axis2ns795="http://tempuri.org/testws">1</axis2ns795:OutputA>
</axis2ns794:Parameters>
</m:testResult>
</m:testResponse>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:0)
private function result(event:ResultEvent) : void {
trace(event.result);
var strData:TestResult_type = event.result as TestResult_type;
var ccxc:Parameters_type = strData.Parameters;
var outA:OutputA_type = ccxc.OutputA;
trace(outA);
var aaa:String = outA.toString();
Alert.show(aaa.toString());
}
trace(event.result)
答案 1 :(得分:0)
而不是使用
private function result(event:ResultEvent) : void {
trace(event.result);
var strData:TestResult_type = event.result as TestResult_type;
var ccxc:Parameters_type = strData.Parameters;
var outA:OutputA_type = ccxc.OutputA;
trace(outA);
var aaa:String = outA.toString();
Alert.show(aaa.toString());
}
尝试使用Object而不是直接投射它。
var retObj:Object = event.result;
var strData:TestResult_type = new TestResult_type();
strData.firstProperty = retObj.firstProperty;
strData.secondProperty = retObj.secondProperty;
我认为我之前遇到过这样的问题,你不能像在java端那样将返回的对象分配给flex对象。如果这样可行,则必须遍历每个event.result对象,并通过setter设置对象的所有属性。