写了一个关于struts2导出excel的方法,后台为报错,但找不到相应的文件,不知是哪里错了,求指教?
前台
/* 导出excel */
var importExcel = function(){
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath }/importExcel",
dataType:"html",
success:function(data){
confirm("导出成功");
}
});
}
后台
struts.xml
<!-- 导出excel -->
<action name="importExcel" class="org.fkjava.s2sh.action.ImportExcelAction">
<result name="excel" type="stream"> <param name="contentType">application/vnd.ms-excel</param>
<param name="inputName">excelInputStream</param>
<param name="contentDisposition">filename="用户情况详情.xls"</param>
<param name="bufferSize">4096</param>
</result>
</action>
action
package org.fkjava.s2sh.action;
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.fkjava.s2sh.domain.User;
import org.fkjava.s2sh.service.UserService;
import org.fkjava.s2sh.util.ExcelUtil;
import com.opensymphony.xwork2.Action;
public class ImportExcelAction implements Action {
private UserService us;
private List<User> users;
private InputStream excelInputStream;
public List<User> getUsers() {
return users;
}
public void setUsres(List<User> users) {
this.users = users;
}
public void setUs(UserService us) {
this.us = us;
}
public InputStream getExcelInputStream() {
users = us.getAllUser(null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ExcelUtil.toExcel(users, out);
return new ByteArrayInputStream(out.toByteArray());
}
@Override
public String execute() throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode("用户情况详情", "UTF-8") + ".xls");
excelInputStream = this.getExcelInputStream();
return "excel";
}
}
excel生成类
package org.fkjava.s2sh.util;
import java.io.ByteArrayOutputStream;
import java.util.List;
import org.fkjava.s2sh.domain.User;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class ExcelUtil {
public static void toExcel(List<User> users, ByteArrayOutputStream os) {
String[] title = { "姓名", "密码", "生日" };
WritableWorkbook wwb = null;
try {
wwb = Workbook.createWorkbook(os);
WritableSheet sheet = wwb.createSheet("用户信息详情.xls", 0);
Label label = null;
for (int i = 0; i < title.length; i++) {
label = new Label(i, 0, title[i]);
sheet.addCell(label);
}
Label label2 = null;
User user = null;
for (int i = 0; i < users.size(); i++) {
user = users.get(i);
label2 = new Label(0, i + 1, String.valueOf(user.getName()));
sheet.addCell(label2);
label2 = new Label(1, i + 1, String.valueOf(user.getPass()));
sheet.addCell(label2);
label2 = new Label(2, i + 1, String.valueOf(user.getBirth()));
sheet.addCell(label2);
}
wwb.write();
} catch (Exception e) {
e.printStackTrace();
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
既然是导出Excel,应该不能用Ajax方式吧。另外“导出”的英文不是import而是exportajax不支持下载文件,使用form表单提交吧。<divclass='ref'>