package xin.glue.ui.common.blob; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import com.posdata.glue.biz.constants.PosBizControlConstants; import com.posdata.glue.biz.control.PosBizProvider; import com.posdata.glue.context.PosContext; import com.posdata.glue.web.control.PosWebConstants; public abstract class PosBolbManager { protected HttpServletRequest request; private HttpServletResponse response; private JspWriter out; private PageContext pageContext; protected List dataList = new ArrayList(); public PosBolbManager(HttpServletRequest request, HttpServletResponse response, JspWriter out, PageContext pageContext) { super(); this.request = request; this.response = response; this.out = out; this.pageContext = pageContext; } public void getContext() throws Exception { PosContext context = new PosContext(); request.setAttribute(PosWebConstants.CONTEXT, context); context.put(PosBizControlConstants.SERVICE_NAME, request.getParameter("ServiceName")); context.setRequestParameters(request.getParameterMap()); HashMap map = new HashMap(); for (Enumeration enum1 = request.getAttributeNames(); enum1.hasMoreElements();) { String key = (String) enum1.nextElement(); map.put(key, request.getAttribute(key)); } context.setRequestAttr(map); PosBizProvider.getController().doAction(context); String[] resultKeys; if (request.getParameter("resultKey") != null) { resultKeys = request.getParameter("resultKey").split("\\|"); } else { resultKeys = (String[])context.get("ResultKeyList"); } for (int i = 0, length = resultKeys.length; i < length; i++) { Object obj = context.get(resultKeys[i]); if (obj != null) dataList.add(obj); } response.reset(); // 这行设定本网页为excel格式的网页 // application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档 response.setContentType("application/ms-excel;charset=UTF-8"); // 线上浏览的方式(为能多次打开,使用时间作为文件名): response.setHeader("Content-disposition", "inline; filename=" + (new SimpleDateFormat("yyyyMMddhhmmss")).format(new Date()) + ".xls"); // 下载的方式: // response.setHeader("Content-disposition", "attachment; filename=test2.xls"); OutputStream os = response.getOutputStream(); setContext(os); os.flush(); os.close();// *important* to ensure no more jsp output os = null; // response.flushBuffer(); out.clear(); out.close(); out = pageContext.pushBody(); } protected abstract void setContext(OutputStream os) throws Exception; }