jfy3d(劍事)BLOG

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            37 隨筆 :: 0 文章 :: 363 評論 :: 0 Trackbacks

          WebWork中除了默認(rèn)支持的幾中視圖外還可以自己來定義需要的視圖,如JFreeChart,Excel等

          這里生成Excel用的是POI的API
          WebWork中定義ResultType視圖類型只需要繼承Result接口
          代碼如下

          package com.customer.resulttype;

          import com.opensymphony.xwork.Result;
          import com.opensymphony.xwork.ActionInvocation;
          import com.opensymphony.webwork.ServletActionContext;
          import org.apache.poi.hssf.usermodel.HSSFWorkbook;

          import javax.servlet.http.HttpServletResponse;
          import java.io.OutputStream;

          public class ExcelResult implements Result{
          ??? private HSSFWorkbook workbook;
          ??? private String filename;
          ??? private String contenttype;
          ??? public void execute(ActionInvocation invocation) throws Exception {
          ??????? if(contenttype==null)
          ??????????? contenttype = "application/ms-excel";
          ??????? if (workbook==null)
          ??????????? workbook = (HSSFWorkbook) invocation.getStack().findValue("workbook");
          ??????

          ??????? HttpServletResponse response = ServletActionContext.getResponse();
          ??????? response.setContentType(contenttype);
          ??????? response.setHeader("Content-Disposition","attachment;Filename="+filename+".xls");
          ??????? OutputStream os = response.getOutputStream();
          ??????? workbook.write(os);
          ??????? os.flush();
          ??????? os.close();
          ??? }

          ??? public void setWorkbook(HSSFWorkbook workbook) {
          ??????? this.workbook = workbook;
          ??? }

          ??? public void setFilename(String filename) {
          ??????? this.filename = filename;
          ??? }

          ??? public void setContenttype(String contenttype) {
          ??????? this.contenttype = contenttype;
          ??? }
          }

          視圖做完之后做如下配置運(yùn)行測試

          package com.customer.action;

          import com.opensymphony.xwork.ActionContext;
          import com.opensymphony.xwork.ActionSupport;
          import com.opensymphony.webwork.ServletActionContext;
          import com.dboperate.ResultGather;
          import org.apache.poi.hssf.usermodel.*;
          import org.apache.poi.hssf.util.HSSFColor;

          import java.io.FileOutputStream;
          import java.io.InputStream;
          import java.io.InputStreamReader;
          import java.io.ByteArrayInputStream;
          import java.util.List;
          import java.util.Map;

          public class ExportExcelAction extends ActionSupport {
          ??? private HSSFWorkbook workbook;

          ??? public String execute() throws Exception {
          ??????? return SUCCESS;
          ??? }

          ??? public String product() throws Exception {
          ??????? try {
          ??????????? workbook = new HSSFWorkbook();
          ??????????? HSSFSheet sheet = workbook.createSheet();

          ??????????? workbook.setSheetName(0, "廠商產(chǎn)品", (short) 1);
          ??????????? HSSFRow row = sheet.createRow((short) 0);

          ??????????? HSSFCell cell0 = row.createCell((short) 0);
          ??????????? HSSFCell cell1 = row.createCell((short) 1);
          ??????????? HSSFCell cell2 = row.createCell((short) 2);
          ??????????? HSSFCell cell3 = row.createCell((short) 3);
          ??????????? HSSFCell cell4 = row.createCell((short) 4);
          ??????????? HSSFCell cell5 = row.createCell((short) 5);
          ??????????? HSSFCell cell6 = row.createCell((short) 6);
          ??????????? HSSFCell cell7 = row.createCell((short) 7);
          ??????????? HSSFCell cell8 = row.createCell((short) 8);
          ??????????? HSSFCell cell9 = row.createCell((short) 9);

          ??????????? cell0.setEncoding(HSSFCell.ENCODING_UTF_16);//這里是設(shè)置編碼保證中文正常顯示
          ??????????? cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell3.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell4.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell5.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell6.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell7.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell8.setEncoding(HSSFCell.ENCODING_UTF_16);
          ??????????? cell9.setEncoding(HSSFCell.ENCODING_UTF_16);

          ??????????? cell0.setCellValue("廠商名");
          ??????????? cell1.setCellValue("產(chǎn)品名");
          ??????????? cell2.setCellValue("重量");
          ??????????? cell3.setCellValue("星級");
          ??????????? cell4.setCellValue("parama");
          ??????????? cell5.setCellValue("paramb");
          ??????????? cell6.setCellValue("paramc");
          ??????????? cell7.setCellValue("paramd");
          ??????????? cell8.setCellValue("狀態(tài)");
          ??????????? cell9.setCellValue("備注");

          ??????? } catch (Exception e) {
          ??????? }
          ??????? return SUCCESS;
          ??? }

          ??? public HSSFWorkbook getWorkbook() {
          ??????? return workbook;
          ??? }


          }

          Xwork.xml中配置加入

          ??????? <result-type default="true" name="freemarker"
          ??????????? <result-type name="excel" class="com.customer.resulttype.ExcelResult"/>
          ??????? </result-types>

          ?<action name="exportExcel" class="com.customer.action.ExportExcelAction">

          ??????????? <result name="success" type="excel">
          ??????????????? <param name="filename">productparam>
          ???????????????
          ??????????? </result>

          ??????? </action>

          posted on 2006-04-11 12:16 劍事 閱讀(5704) 評論(5)  編輯  收藏 所屬分類: webwork

          評論

          # re: WebWork中自定義result視圖使用POI生成Excel 2006-04-18 14:55 lynx
          System.out.println(invocation.getStack().findValue("workbook"));

          這個打印出來是null

          前臺頁面報錯:
          java.lang.IllegalStateException: getOutputStream() has already been called for this response
          org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
          org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:163)
          com.opensymphony.webwork.views.freemarker.FreemarkerServlet.process(FreemarkerServlet.java:229)


          后臺tomcat報錯:
          04-18 14:51:38.828 ERROR [ExceptionInterceptor.java:38] Caught exception while invoking action: compare.ExportToExcelToolAction@1f1c748
          java.lang.NullPointerException
          at compare.ExcelResult.execute(ExcelResult.java:38)
          at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:258)
          at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:182)
          at gxlu.webapps.umv.core.webwork.interceptor.AuditInterceptor.intercept(AuditInterceptor.java:46)  回復(fù)  更多評論
            

          # 怎么動態(tài)設(shè)置下載后的文件名??? 2006-04-18 15:14 hello
          文件名在action 中動態(tài)生成傳到excelresult里面怎么寫??
          我不想在<result name="success" type="excel">
          <param name="filename">productparam>
          </result>
          中寫死.  回復(fù)  更多評論
            

          # re: WebWork中自定義result視圖使用POI生成Excel 2006-04-18 21:22 劍事
          tomcat 5 webwork 2.17版本運(yùn)行正常

          動態(tài)指定文件名可以再ACTION中
          private String filename;
          public String getFilename() {
          return filename;
          }
          然后result中

          if(filename==null)
          filename = (String)invocation.getStack().findValue("filename");  回復(fù)  更多評論
            

          # re: WebWork中自定義result視圖使用POI生成Excel 2006-04-19 10:16 asdfd
          配置好了.謝謝!  回復(fù)  更多評論
            

          # re: WebWork中自定義result視圖使用POI生成Excel 2009-03-09 11:18 Robert Su
          <result-type default="true" name="freemarker"
          <result-type name="excel" class="com.customer.resulttype.ExcelResult"/>
          </result-types>

          控制臺輸出
          嚴(yán)重: Could not find action or result
          No result defined for action……  回復(fù)  更多評論
            

          主站蜘蛛池模板: 临夏县| 莆田市| 抚州市| 格尔木市| 天津市| 内黄县| 静宁县| 合肥市| 兴业县| 东港市| 孟州市| 连平县| 大悟县| 美姑县| 泸水县| 红原县| 阳春市| 黄冈市| 南通市| 辽源市| 和田县| 六盘水市| 秭归县| 进贤县| 三河市| 武定县| 青浦区| 梅河口市| 东兰县| 新绛县| 柳江县| 定州市| 天台县| 通海县| 彰化县| 兴安盟| 屏山县| 泸西县| 交城县| 泰顺县| 白山市|