@ doc_180 มีแนวคิดที่ถูกต้องยกเว้นว่าเขามุ่งเน้นไปที่ตัวเลขในขณะที่โปสเตอร์ดั้งเดิมมีปัญหากับสตริง
ทางออกคือการเปลี่ยนmx.rpc.xml.XMLEncoder
ไฟล์ นี่คือบรรทัดที่ 121:
if (content != null)
result += content;
(ฉันดู Flex 4.5.1 SDK; หมายเลขบรรทัดอาจแตกต่างกันในเวอร์ชันอื่น)
โดยทั่วไปการตรวจสอบความถูกต้องล้มเหลวเนื่องจาก 'เนื้อหาเป็นโมฆะ' ดังนั้นอาร์กิวเมนต์ของคุณจะไม่ถูกเพิ่มลงใน SOAP Packet ขาออก จึงทำให้เกิดข้อผิดพลาดพารามิเตอร์ที่หายไป
คุณต้องขยายคลาสนี้เพื่อลบการตรวจสอบ จากนั้นมีก้อนหิมะขนาดใหญ่ขึ้นบนโซ่ปรับเปลี่ยน SOAPEncoder เพื่อใช้ XMLEncoder ที่แก้ไขแล้วจากนั้นปรับเปลี่ยนการดำเนินการเพื่อใช้ SOAPEncoder ที่แก้ไขแล้วจากนั้น moidfying WebService เพื่อใช้คลาสการดำเนินงานสำรองของคุณ
ฉันใช้เวลาสองสามชั่วโมง แต่ฉันต้องเดินหน้าต่อไป อาจใช้เวลาหนึ่งหรือสองวัน
คุณอาจสามารถแก้ไขบรรทัด XMLEncoder และทำการแก้ไขลิงเพื่อใช้คลาสของคุณเอง
ฉันจะเพิ่มด้วยถ้าคุณสลับไปใช้ RemoteObject / AMF กับ ColdFusion ค่า null จะถูกส่งผ่านโดยไม่มีปัญหา
ปรับปรุง 11/16/2013 :
ฉันมีอีกหนึ่งความเห็นล่าสุดของฉันเกี่ยวกับ RemoteObject / AMF หากคุณใช้ ColdFusion 10; ดังนั้นคุณสมบัติที่มีค่า Null บนวัตถุจะถูกลบออกจากวัตถุฝั่งเซิร์ฟเวอร์ ดังนั้นคุณต้องตรวจสอบคุณสมบัติที่มีอยู่ก่อนที่จะเข้าถึงมิฉะนั้นคุณจะได้รับข้อผิดพลาดรันไทม์
ตรวจสอบดังนี้:
<cfif (structKeyExists(arguments.myObject,'propertyName')>
<!--- no property code --->
<cfelse>
<!--- handle property normally --->
</cfif>
นี่คือการเปลี่ยนแปลงพฤติกรรมจาก ColdFusion 9; โดยที่คุณสมบัติ null จะเปลี่ยนเป็นสตริงว่าง
แก้ไข 12/6/2013
เนื่องจากมีคำถามเกี่ยวกับวิธีปฏิบัติต่อ nulls ต่อไปนี้เป็นตัวอย่างแอปพลิเคชันอย่างรวดเร็วเพื่อแสดงให้เห็นว่าสตริง "null" จะเกี่ยวข้องกับคำที่สงวนไว้เป็นโมฆะได้อย่างไร
<?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" minWidth="955" minHeight="600" initialize="application1_initializeHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function application1_initializeHandler(event:FlexEvent):void
{
var s :String = "null";
if(s != null){
trace('null string is not equal to null reserved word using the != condition');
} else {
trace('null string is equal to null reserved word using the != condition');
}
if(s == null){
trace('null string is equal to null reserved word using the == condition');
} else {
trace('null string is not equal to null reserved word using the == condition');
}
if(s === null){
trace('null string is equal to null reserved word using the === condition');
} else {
trace('null string is not equal to null reserved word using the === condition');
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:Application>
ผลลัพธ์การติดตามคือ:
สตริง null ไม่เท่ากับคำสงวน null โดยใช้เงื่อนไข! =
สตริง null ไม่เท่ากับคำสงวน null โดยใช้เงื่อนไข ==
สตริง null ไม่เท่ากับคำสงวน null โดยใช้เงื่อนไข ===