这是我遇到的一个奇怪的问题,或者说是Flex 3的一个缺点。我正在使用SOAP消息传递协议,服务器对我在弹出窗口中填写“Notes”字段的响应如下所示:
因为这是SOAP,所以我得到的响应是XML字符串。GLNotes字段值是4582 e12。
关于如何处理此响应的一些Flex代码:
<mx:DataGrid dataProvider="{AccruedIncomeWS.GetAccruedIncomeList.lastResult.root.AccruedIncomeList.Item}"
itemClick="AccrualClick(event);" id="AccrualList>
<mx:columns>
...
</mx:columns>
</mx:DataGrid>
现在,我为AccrualList.selectedItem创建了一个监视表达式,我看到:
为什么GLNotes在这里被转换成一个Number?为了测试这个隐式转换,我在notes字段中放入了一些字符,并在watch表达式中得到了这个:
由于存在一些字母,GLNotes字段被视为字符串。是否有任何方法可以使此值成为强类型,而不应用任何隐式转换?如果需要其他信息,请告诉我。谢谢!
编辑:
正如@Pan所建议的,我将我的数据提供者更改为一个 ArrayCollection AccrualDataProvider。
<mx:DataGrid dataProvider="{AccrualDataProvider}" itemClick="AccrualClick(event);" id="AccrualList>
<mx:columns>
...
</mx:columns>
</mx:DataGrid>
处理来自服务器的响应并将其填充到 ArrayCollection 中。
private function HandleAccrualList(event:ResultEvent):void
{
AccrualDataProvider = new ArrayCollection();
AccrualDataProvider = AppHelper.ForceArrayCollection(event.result.root.AccruedIncomeList.Item);
}
在调试时,我发现 ArrayCollection AccrualDataProvider仍然包含GLNotes作为数字而不是字符串。
遗憾的是,我们必须编写一些额外的代码来避免这种隐式转换,我所做的工作是:从服务器发送时,在GLNotes前面加上“/”,然后在labelFunction中取消转义“/”。因此,flex将其视为字符串,并保持数字字符串不变。
是否可以在服务器端进行任何设置,以便XML对SOAP XML响应强制使用字符串数据类型?
1条答案
按热度按时间7xzttuei1#
您可以尝试使用labelFunction来显示带有数据网格数据的自定义视图。
下面是一个示例(数据提供程序是数组,而不是xml)
如果使用labelFunction后问题仍然存在,我想问题可能出在xml dataProvider的使用上。