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>