1 区域批量导入功能
使用jQuery OCUpload :先导入这个插件。然后在jsp页面引入插件js文件。在页面提供任意一个元素。
2 重构分页查询
在baseAction里 抽取PageBean对象和detachedCriteria对象 并且 提供setRows和setPage方法 在pageBean中创建条件查询对象并注入给pageBean对象。在BaseAction中抽取将PageBean对象转化为json的方法
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.annotation.Resource;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.apache.struts2.ServletActionContext;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.beans.factory.annotation.Autowired;
import com.itheima.bos.crm.CustomerService;
import com.itheima.bos.domain.Region;
import com.itheima.bos.domain.Staff;
import com.itheima.bos.service.IDecidedzoneService;
import com.itheima.bos.service.INoticebillService;
import com.itheima.bos.service.IRegionService;
import com.itheima.bos.service.IStaffService;
import com.itheima.bos.service.ISubareaService;
import com.itheima.bos.service.IUserService;
import com.itheima.bos.service.IWorkordermanageService;
import com.itheima.bos.utils.PageBean;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 通用Action实现
*
* @author zhaoqx
*
* @param <T>
*/
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {
// 注入Service
@Resource
protected IUserService userService;
@Autowired
protected IRegionService regionService;
@Autowired
protected IStaffService staffService;
@Autowired
protected ISubareaService subareaService;
@Autowired
protected IDecidedzoneService decidedzoneService;
@Autowired
protected CustomerService customerService;
@Autowired
protected INoticebillService noticebillService;
@Autowired
protected IWorkordermanageService workordermanageService;
protected PageBean pageBean = new PageBean();
DetachedCriteria detachedCriteria = null;
public void setRows(int rows) {
pageBean.setPageSize(rows);
}
public void setPage(int page) {
pageBean.setCurrentPage(page);
}
// 模型对象
protected T model;
public T getModel() {
return model;
}
public void writePageBean2Json(PageBean pageBean, String[] excludes)
throws IOException {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
JSONObject jsonObject = JSONObject.fromObject(pageBean, jsonConfig);
String json = jsonObject.toString();
ServletActionContext.getResponse().setContentType(
"text/json;charset=UTF-8");
ServletActionContext.getResponse().getWriter().print(json);
}
/**
* 在构造方法中动态获得实现类型,通过反射创建模型对象
*/
public BaseAction() {
ParameterizedType genericSuperclass = null;
if(this.getClass().getGenericSuperclass() instanceof ParameterizedType){
genericSuperclass = (ParameterizedType) this
.getClass().getGenericSuperclass();
}else{//当前为Action创建了代理
genericSuperclass = (ParameterizedType) this.getClass().getSuperclass().getGenericSuperclass();
}
Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
// 获得实体类型
Class<T> entityClass = (Class<T>) actualTypeArguments[0];
detachedCriteria = DetachedCriteria.forClass(entityClass);
pageBean.setDetachedCriteria(detachedCriteria);
try {
// 通过反射创建对象
model = entityClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public void writeList2Json(List list, String[] excludes) throws IOException {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
JSONArray jsonObject = JSONArray.fromObject(list, jsonConfig);
String json = jsonObject.toString();
ServletActionContext.getResponse().setContentType(
"text/json;charset=UTF-8");
ServletActionContext.getResponse().getWriter().print(json);
}
public void writeObject2Json(Object object, String[] excludes)
throws IOException {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
JSONObject jsonObject = JSONObject.fromObject(object, jsonConfig);
String json = jsonObject.toString();
ServletActionContext.getResponse().setContentType(
"text/json;charset=UTF-8");
ServletActionContext.getResponse().getWriter().print(json);
}
}
3 添加分区
第一步:使用combobox展示数据区域数据到下拉框中
第二步:在regionAction里提供listajax方法
/**
* 查询所有的区域数据,返回json
* @throws IOException
*/
public String listajax() throws IOException{
List<Region> list = null;//regionService.findAll();
if(StringUtils.isNotBlank(q)){
list = regionService.findByQ(q);
}else{
list = regionService.findAll();
}
String[] excludes = new String[]{"subareas"};
this.writeList2Json(list, excludes);
return NONE;
}
4 分区组合查询条件 分区数据导出功能
第一步:为查询按钮绑定事件 ,提供将表单输入项序列化为json的工具方法
<div class="easyui-window" title="查询分区窗口" id="searchWindow" collapsible="false" minimizable="false" maximizable="false" style="top:20px;left:200px">
<div style="overflow:auto;padding:5px;" border="false">
<form id="searchForm">
<table class="table-edit" width="80%" align="center">
<tr class="title">
<td colspan="2">查询条件</td>
</tr>
<tr>
<td>省</td>
<td><input type="text" name="region.province"/></td>
</tr>
<tr>
<td>市</td>
<td><input type="text" name="region.city"/></td>
</tr>
<tr>
<td>区(县)</td>
<td><input type="text" name="region.district"/></td>
</tr>
<tr>
<td>关键字</td>
<td><input type="text" name="addresskey"/></td>
</tr>
<tr>
<td colspan="2">
<a id="btn" href="#" class="easyui-linkbutton"
data-options="iconCls:'icon-search'">查询</a>
<script>
$(function(){
//工具方法,可以将指定的表单中的输入项目序列号为json数据
$.fn.serializeJson=function(){
var serializeObj={};
var array=this.serializeArray();
$(array).each(function(){
if(serializeObj[this.name]){
if($.isArray(serializeObj[this.name])){
serializeObj[this.name].push(this.value);
}else{
serializeObj[this.name]=[serializeObj[this.name],this.value];
}
}else{
serializeObj[this.name]=this.value;
}
});
return serializeObj;
};
//绑定事件
$("#btn").click(function(){
var p = $("#searchForm").serializeJson();//{id:xx,name:yy,age:zz}
//重新发起ajax请求,提交参数
$("#grid").datagrid("load",p);
//关闭查询窗口
$("#searchWindow").window("close");
});
});
</script>
</td>
</tr>
</table>
</form>
</div>
</div>
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletOutputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.itheima.bos.domain.Region;
import com.itheima.bos.domain.Subarea;
import com.itheima.bos.utils.FileUtils;
import com.itheima.bos.web.action.base.BaseAction;
/**
* 分区管理
*
* @author zhaoqx
*
*/
@Controller
@Scope("prototype")
public class SubareaAction extends BaseAction<Subarea> {
public String add() {
subareaService.save(model);
return "list";
}
public String pageQuery() throws Exception {
// 在查询之前,封装条件
DetachedCriteria detachedCriteria2 = pageBean.getDetachedCriteria();
String addresskey = model.getAddresskey();
Region region = model.getRegion();
if (StringUtils.isNotBlank(addresskey)) {
// 按照地址关键字模糊查询
detachedCriteria2.add(Restrictions.like("addressKey", addresskey));
}
if (region != null) {
// 创建别名,用于多表关联查询
detachedCriteria2.createAlias("region", "r");
String province = region.getProvince();
String city = region.getCity();
String district = region.getDistrict();
if (StringUtils.isNotBlank(province)) {
// 按照省进行模糊查询
detachedCriteria2.add(Restrictions.like("r.province", "%"
+ province + "%"));
}
if (StringUtils.isNotBlank(city)) {
// 按照省进行模糊查询
detachedCriteria2.add(Restrictions.like("r.city", "%" + city
+ "%"));
}
if (StringUtils.isNotBlank(district)) {
// 按照省进行模糊查询
detachedCriteria2.add(Restrictions.like("r.district", "%"
+ district + "%"));
}
}
subareaService.pageQuery(pageBean);
String[] excludes = new String[] { "detachedCriteria", "currentPage",
"pageSize", "decidedzone", "subareas" };
this.writePageBean2Json(pageBean, excludes);
return NONE;
}
/**
* 使用POI写入Excel文件,提供下载
* @throws IOException
*/
public String exportXls() throws IOException {
List<Subarea> list = subareaService.findAll();
// 在内存中创建一个Excel文件,通过输出流写到客户端提供下载
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建一个sheet页
HSSFSheet sheet = workbook.createSheet("分区数据");
// 创建标题行
HSSFRow headRow = sheet.createRow(0);
headRow.createCell(0).setCellValue("分区编号");
headRow.createCell(1).setCellValue("区域编号");
headRow.createCell(2).setCellValue("地址关键字");
headRow.createCell(3).setCellValue("省市区");
for (Subarea subarea : list) {
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
dataRow.createCell(0).setCellValue(subarea.getId());
dataRow.createCell(1).setCellValue(subarea.getRegion().getId());
dataRow.createCell(2).setCellValue(subarea.getAddresskey());
Region region = subarea.getRegion();
dataRow.createCell(3).setCellValue(region.getProvince()+region.getCity()+region.getDistrict());
}
String filename = "分区数据.xls";
String agent = ServletActionContext.getRequest().getHeader("User-Agent");
filename = FileUtils.encodeDownloadFilename(filename, agent);
//一个流两个头
ServletOutputStream out = ServletActionContext.getResponse().getOutputStream();
String contentType = ServletActionContext.getServletContext().getMimeType(filename);
ServletActionContext.getResponse().setContentType(contentType);
ServletActionContext.getResponse().setHeader("content-disposition", "attchment;filename="+filename);
workbook.write(out);
return NONE;
}
public String listajax() throws IOException{
List<Subarea> list = subareaService.findListNotAssociation();
String[] excludes = new String[]{"decidedzone","region"};
this.writeList2Json(list, excludes );
return NONE;
}
}