//action代码
public class BaseAction extends ActionSupport implements RequestAware,
SessionAware, ApplicationAware, ParameterAware, ServletContextAware,
ServletRequestAware, ServletResponseAware {
@Autowired
private HouseEntityManager houseEntityManager;
protected Map<String, Object> requestMap;
protected Map<String, Object> sessionMap;
protected Map<String, Object> applicationMap;
protected Map<String, String[]> parametersMap;
protected HttpServletRequest request;
protected HttpServletResponse response;
protected ServletContext application;
/**
* 导出数据库全部信息
*/
public void allToExcel() {
houseEntityManager.allToExcel(response);
}
public void setRequest(Map<String, Object> arg0) {
this.requestMap = arg0;
}
public void setSession(Map<String, Object> arg0) {
this.sessionMap = arg0;
}
public void setApplication(Map<String, Object> arg0) {
this.applicationMap = arg0;
}
public void setParameters(Map<String, String[]> arg0) {
this.parametersMap = arg0;
}
public void setServletContext(ServletContext arg0) {
this.application = arg0;
}
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
}
public void setServletResponse(HttpServletResponse arg0) {
this.response = arg0;
}
}
/**
* Creator: sunvsjay
* Create Time: 2012-9-3 上午11:21:24
*/
package com.sinosoft.service.house;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springside.modules.orm.Page;
import org.springside.modules.orm.PropertyFilter;
import org.springside.modules.security.springsecurity.SpringSecurityUtils;
import com.sinosoft.dao.house.ContractHouseDao;
import com.sinosoft.dao.house.HouseDao;
import com.sinosoft.entity.house.ContractHouse;
import com.sinosoft.entity.house.House;
import com.sinosoft.util.HouseConstant;
import com.sinosoft.util.JxlXlsWriter;
@Service
@Transactional
public class HouseEntityManager {
/**
* 日志
*/
private static Logger logger = LoggerFactory
.getLogger(HouseEntityManager.class);
/**
* 房屋的Dao
*/
@Autowired
private HouseDao houseDao;
@Autowired
private ContractHouseDao contractHouseDao;
/**
* 删除房屋
* @param id
* 房屋Id
*/
public void delete(Long houseId) {
if (houseId != null) {
House house = houseDao.get(houseId);
house.setDelFlag(HouseConstant.HOUSE_DELFLAG_Y);
house.setOperDate(new Date());
house.setOperId(SpringSecurityUtils.getCurrentUserName());
houseDao.save(house);
} else {
logger.debug("houseId error");
}
}
/**
* 获取房屋信息
*
* @param id
* 房屋Id
* @return
*/
public House get(Long houseId) {
return houseDao.get(houseId);
}
/**
* 保存房屋信息
* @param entity
* 房屋信息
*/
public void saveHouse(House entity) {
logger.debug("save House");
houseDao.save(entity);
}
/**
* 使用属性过滤条件查询用户.
* @param page
* 分页信息
* @param filters
* 过滤条件
* @return
*/
@Transactional(readOnly = true)
public Page<House> searchHouse(final Page<House> page,
final List<PropertyFilter> filters) {
logger.debug("Search House");
PropertyFilter filter = new PropertyFilter("EQS_delFlag",HouseConstant.HOUSE_DELFLAG_N);// 显示标志位N的未删除的
filters.add(filter);
return houseDao.findPage(page, filters);
}
/**
* 获取所有房屋信息
* @return
*/
@Transactional(readOnly = true)
public List<House> getAllHouse() {
return houseDao.getAll("houseId", true);
}
/**
* 获取部分住房
*/
public List<House> findHouseList(Long contractId) {
List<House> houseList = new ArrayList<House>();
// 查询等未售的
List<House> waitList = houseDao.findBy("status", HouseConstant.HOUSE_HOUSE_STATUS_NO);
houseList.addAll(waitList);
// 如果id不为空,操作
if (contractId != null) {
// 查询已选的
List<ContractHouse> contractHouseList = contractHouseDao.findBy(
"id.contractId", contractId);// 查找唯一的条
// 循环遍历
// contractHouse就只是存id的
for (ContractHouse contractHouse : contractHouseList) {
houseList.add(houseDao.get(contractHouse.getId().getHouseId()));
}
}
return houseList;
}
public List<House> getHouse(){
return houseDao.getHouse();
}
//导出数据库全部信息到excel文件
public void allToExcel(HttpServletResponse response) {
//需要导出的数据
List<House> list=houseDao.getHouse();
//下载是显示给用户的文件名(如果是中文需要作一定处理,否则会有乱码)
String fileName="all.xls";
//调用导出的具体实现方法
toExcel(list,fileName,response);
}
//导出的具体实现方法
public void toExcel(List<House> list, String fileName, HttpServletResponse response) {
try {
//对文件名作处理,避免中文乱码问题
String name = new String(fileName.getBytes("gbk"),"iso8859-1");
//设置response相应属性,设置为下载
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Content-Type", "application/force-download");
response.setHeader("Content-Type", "application/octet-stream");
response.setHeader("Content-Type", "application/download");
response.setHeader("Cache-Control", "private, max-age=0, must-revalidate");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "attachment; filename=\"" + name + "\"");
//获得response中的输出流
OutputStream out=response.getOutputStream();//输出到页面上
//excel表格第一行标题,本例中不采用poi或jxl,只对每个单元属性后面添//加\t,每行结束加\n。这是excel文件的基本属性。
String head="房屋地址\t房间数\t房屋面积\t使用面积\n";
//编码应该根据本地编码来确定。如果是台湾同胞,这里需要改为big5
out.write(head.getBytes("gbk"));
for(House a:list){
//加上\t,\n等分隔符,写出文件,当文件以.xls命名时,打开即为普通excel文件
String s=a.getAddress()+"\t"+a.getRoomsNum()+"\t"+a.getFloorArea()+"\t"+a.getUseArea()+"\n";
out.write(s.getBytes("gbk"));
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
jsp页面
<script type="text/javascript">
function sure(){
if(window.confirm("你是否要下载")){
document.lastForm.action="base!allToExcel.action";
document.lastForm.submit();
}
}
</script>
<form name="lastForm">
<input type="button" id="btn" value="导出数据为excel" οnclick="sure()"/>
</form>