Flex虽然提供了HTTPService,WEBService等方式与各种WEB服务器通信,但有时候我们仍然希望调用某些JAVA写的servlet或者JSP页面,这里举了个将FLEX页面数据导出为EXCEL表格的例子。
Flex代码:
protected function exportToExcel():void
{
var str:String ="<table><tr><td>aaa</td><td>aaa</td><td>aaa</td></tr></table>";
var url:String = "/exportExcel.jsp"; //这里替换为JSP访问路径
var req:URLRequest = new URLRequest(url);
var variables:URLVariables = new URLVariables();
variables.htmltable = str;
req.data = variables; //Pass the variables
req.method = URLRequestMethod.POST; //Don’t forget that we need to send as POST
navigateToURL(u,"_self");
}
然后在页面添加一个BUTTON。点击后调用该function:
<mx:Button label="导出为EXCEL" click="exportToExcel()"/>
下面是JSP代码:
<%@ page language="java" import="java.util.*,java.io.*,java.net.URLDecoder" pageEncoding="utf-8"%>
<%@page contentType="application/msexcel;charset=utf-8"%>
<%
request.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition","attachment;filename=exportExcel.xls");
response.setContentType("application/msexcel");
InputStream is = request.getInputStream();
BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
String temp = new String("");
while ((temp = tBufferedReader.readLine()) != null){
sb.append(temp.replaceFirst("htmltable=",""));
}
out.print(URLDecoder.decode(sb.toString()));
%>
代码不多,但JSP页面有几个细节地方值得注意:
1.用request.getAttribute()或者request.getParameter()无法获得flex中传递的参数。
2.通过上面方式取得的数据为一个键值对字符串,本例为htmltable=<table><tr><td>aaa</td><td>aaa</td><td>aaa</td></tr></table>;
所以需要做下处理,去掉=和=前面的东西。
3.如果不进行URLDecoder.decode(sb.toString()),则得到的数据为%3Ctable......之类的数据,所以需要进行decode才能正确识别。
4.flex换行符为