Actionscript 3 Flex:通过Servlet导出Excel

Actionscript 3 Flex:通过Servlet导出Excel,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我希望用户按下excel按钮并得到下载excel文件的提示。我通常是这样做的: var dest:String = excelEndpoint; var request:URLRequest = new URLRequest(); request.url = dest; fr.download( request,'Locates.xls' ); fr.addEventListener(HTTPStatusEvent.HTTP_ST

我希望用户按下excel按钮并得到下载excel文件的提示。我通常是这样做的:

var dest:String = excelEndpoint;

        var request:URLRequest = new URLRequest();
        request.url = dest;
        fr.download( request,'Locates.xls' );
        fr.addEventListener(HTTPStatusEvent.HTTP_STATUS, handleStatus);
        fr.addEventListener(IOErrorEvent.IO_ERROR, handleErr);
但是,现在我需要向servlet传递一个对象。看到您无法使用URLRequest执行此操作,我尝试使用HTTPService:

var service:HTTPService = new HTTPService();
        service.url = excelEndpoint;
        service.method = "POST";
        service.showBusyCursor = true;
        service.addEventListener("result", httpResult);
        service.addEventListener("fault", httpFault);
        service.send( myObject);
现在,我可以成功地将我的数据myObject发送到servlet,但没有收到下载提示

我该怎么做?使用HTTPService是否可能


谢谢你的建议

我认为,如果Flash Player发出远程请求,提示用户下载某些内容,那么您就无法执行任何操作。我过去的做法有两个方面:

远程请求pings生成excel文件并将其保存到临时目录的服务器。该请求返回一个指向Flex应用程序的URL作为调用的结果

当Flex应用程序得到结果——一个URL时,它会创建一个URL请求,并在新窗口中打开它,提示用户下载生成的excel工作表

我看不到一次就可以做到这一点;因为Flex HTTPService调用的返回值将传递给Flash播放器,而不是浏览器

已解决:

我想通过一个远程调用来实现这一点,我发现在传递包含集合的对象时实现这一点的方法如下:

var uv:URLVariables = new URLVariables();
uv.typesColl = myObj.types.toString();
uv.partiesColl = myObj.parties.toString();
uv.statuses = myObj.statuses.toString();
基本上,为每个集合在URLVariables对象上创建一个属性,然后将所有集合设置为String


希望这能对其他人有所帮助。

当您不必向Java servlet传递比一组键/值对更复杂的内容时,您就可以这样做了。然而,在我的例子中,我需要传递一个复杂的对象;这就是问题所在。在你的问题中,你说你已经能够通过这个复杂的物体了。现在我可以成功地将我的数据myObject获取到servlet。我读到的问题与正确地将数据传递到服务器无关。对:我可以在不传递复杂数据的情况下提示下载,也可以传递复杂数据但不提示下载……但两者都不能。我不确定问题出在哪里。你对我提出的解决方案有问题吗?您了解HTTPService调用和URLRequest之间的区别吗?URLRequest创建一个新的URL请求。HTTPService调用远程服务器并得到结果。是的,我理解其中的区别。不,我对你的方法不感兴趣,尽管它完全有效;我想要一种一次性完成的方法。我找到了一个解决方案,我将在上面发布。请记住URL字符串的字符限制:。只要对象的字符串表示不会使URL太长;你应该没事的。