【发布时间】:2016-09-20 23:43:11
【问题描述】:
这是我遇到的一个奇怪问题或 Flex 3 的缺点。我正在使用 SOAP 消息传递协议,并且来自服务器的用于填充我在弹出窗口中的“注释”字段的响应如下所示:
因为这是 SOAP,所以我将响应作为 XML 字符串。 GLNotes 字段值为 4582e12。
关于我如何处理此响应的一些 Flex 代码:
<mx:DataGrid dataProvider="{AccruedIncomeWS.GetAccruedIncomeList.lastResult.root.AccruedIncomeList.Item}"
itemClick="AccrualClick(event);" id="AccrualList>
<mx:columns>
...
</mx:columns>
</mx:DataGrid>
现在我为 AccrualList.selectedItem 创建了一个监视表达式,我看到了:
为什么 GLNotes 在这里被转换为数字?为了测试这种隐式转换,我在 notes 字段中放置了一些字符,并在 watch 表达式中得到了这个:
由于某些字母的存在,GLNotes 字段被视为字符串。无论如何我可以使这个值成为强类型并且不应用任何隐式转换?让我知道是否需要其他信息。谢谢!
编辑:
按照@Pan 的建议,我将 dataProvider 更改为 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 响应?
【问题讨论】:
标签: xml web-services actionscript-3 apache-flex soap