f57010c18b81ffbe266fd12452288e89ac7fbfe2.svn-base 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package xin.glue.ui.common.blob;
  2. import java.io.OutputStream;
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.Enumeration;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import javax.servlet.jsp.JspWriter;
  12. import javax.servlet.jsp.PageContext;
  13. import com.posdata.glue.biz.constants.PosBizControlConstants;
  14. import com.posdata.glue.biz.control.PosBizProvider;
  15. import com.posdata.glue.context.PosContext;
  16. import com.posdata.glue.web.control.PosWebConstants;
  17. public abstract class PosBolbManager {
  18. protected HttpServletRequest request;
  19. private HttpServletResponse response;
  20. private JspWriter out;
  21. private PageContext pageContext;
  22. protected List dataList = new ArrayList();
  23. public PosBolbManager(HttpServletRequest request,
  24. HttpServletResponse response, JspWriter out, PageContext pageContext) {
  25. super();
  26. this.request = request;
  27. this.response = response;
  28. this.out = out;
  29. this.pageContext = pageContext;
  30. }
  31. public void getContext() throws Exception {
  32. PosContext context = new PosContext();
  33. request.setAttribute(PosWebConstants.CONTEXT, context);
  34. context.put(PosBizControlConstants.SERVICE_NAME, request.getParameter("ServiceName"));
  35. context.setRequestParameters(request.getParameterMap());
  36. HashMap map = new HashMap();
  37. for (Enumeration enum1 = request.getAttributeNames(); enum1.hasMoreElements();) {
  38. String key = (String) enum1.nextElement();
  39. map.put(key, request.getAttribute(key));
  40. }
  41. context.setRequestAttr(map);
  42. PosBizProvider.getController().doAction(context);
  43. String[] resultKeys;
  44. if (request.getParameter("resultKey") != null) {
  45. resultKeys = request.getParameter("resultKey").split("\\|");
  46. } else {
  47. resultKeys = (String[])context.get("ResultKeyList");
  48. }
  49. for (int i = 0, length = resultKeys.length; i < length; i++) {
  50. Object obj = context.get(resultKeys[i]);
  51. if (obj != null)
  52. dataList.add(obj);
  53. }
  54. response.reset();
  55. // 这行设定本网页为excel格式的网页
  56. // application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档
  57. response.setContentType("application/ms-excel;charset=UTF-8");
  58. // 线上浏览的方式(为能多次打开,使用时间作为文件名):
  59. response.setHeader("Content-disposition", "inline; filename=" + (new SimpleDateFormat("yyyyMMddhhmmss")).format(new Date()) + ".xls");
  60. // 下载的方式:
  61. // response.setHeader("Content-disposition", "attachment; filename=test2.xls");
  62. OutputStream os = response.getOutputStream();
  63. setContext(os);
  64. os.flush();
  65. os.close();// *important* to ensure no more jsp output
  66. os = null;
  67. // response.flushBuffer();
  68. out.clear();
  69. out.close();
  70. out = pageContext.pushBody();
  71. }
  72. protected abstract void setContext(OutputStream os) throws Exception;
  73. }