jfy3d(劍事)BLOG

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

          WebWork中除了默認支持的幾中視圖外還可以自己來定義需要的視圖,如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;
          ??? }
          }

          視圖做完之后做如下配置運行測試

          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, "廠商產品", (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);//這里是設置編碼保證中文正常顯示
          ??????????? 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("產品名");
          ??????????? cell2.setCellValue("重量");
          ??????????? cell3.setCellValue("星級");
          ??????????? cell4.setCellValue("parama");
          ??????????? cell5.setCellValue("paramb");
          ??????????? cell6.setCellValue("paramc");
          ??????????? cell7.setCellValue("paramd");
          ??????????? cell8.setCellValue("狀態");
          ??????????? 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 劍事 閱讀(5695) 評論(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)  回復  更多評論
            

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

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

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

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

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

          # 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>

          控制臺輸出
          嚴重: Could not find action or result
          No result defined for action……  回復  更多評論
            

          主站蜘蛛池模板: 阳春市| 福建省| 富锦市| 通州区| 祁连县| 龙陵县| 佳木斯市| 南皮县| 惠东县| 名山县| 建始县| 南昌市| 竹北市| 玉树县| 来宾市| 平陆县| 介休市| 汽车| 巴南区| 建湖县| 米泉市| 郸城县| 苗栗县| 平湖市| 宜章县| 沧源| 彰化县| 穆棱市| 南昌县| 莱州市| 道孚县| 类乌齐县| 拜城县| 阿荣旗| 通化市| 遂平县| 榆树市| 清水河县| 五家渠市| 乃东县| 莱芜市|