java项目区域 定区 分区_JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结...

1 学习计划

1、分区组合条件分页查询

n 分区分页查询(没有过滤条件)

n 分区分页查询(带有过滤条件)

2、分区导出

n 页面调整

n 使用POI将数据写到Excel文件

n 通过输出流进行文件下载

3、定区添加

n 定区概念

n 定区添加页面调整

n 服务端实现

4、定区分页查询

n 页面调整

n 服务端实现

n 分页问题总结

2 分区组合条件分页查询

2.1 分区分页查询(没有过滤条件)

页面:WEB-INF/pages/base/subarea.jsp

第一步:修改jsp页面中datagrid的URL地址

fc8f2a422531219bfd2d1091ae46253e.png

第二步:在SuareaAction中提供分页查询方法pageQuery

2ae0ab199c5404b8a1bebc275bd5b260.png

第三步:修改subarea.hbm.xml

2f6cbfc82eaefe57da89faa63ae7fcf6.png

2.2 分区分页查询(带有过滤条件)

2.2.1 页面调整

dfbd1ac76a85656dbbb61a9758e72f74.png

datagrid提供的方法:用于重新发送ajax请求,并且可以提交参数

572f5146af10523cdf55be5b66583367.png

第一步:提供一个工具方法,可以将指定的form表单中所有的输入项转为json数据,用于参数提交

//定义一个工具方法,用于将指定的form表单中所有的输入项转为json数据{key:value,key:value}

$.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;

}

});returnserializeObj;

};

第二步:为查询窗口中查询按钮绑定事件

$("#btn").click(function(){//将指定的form表单中所有的输入项转为json数据{key:value,key:value}

var p = $("#searchForm").serializeJson();

console.info(p);//调用数据表格的load方法,重新发送一次ajax请求,并且提交参数

$("#grid").datagrid("load",p);//关闭查询窗口

$("#searchWindow").window("close");

});

018230d2c37ab89479f4c529c4be4621.png

2.2.2 修改Action中分页查询方法

/*** 分页查询*/

publicString pageQuery(){

DetachedCriteria dc=pageBean.getDetachedCriteria();//动态添加过滤条件

String addresskey =model.getAddresskey();if(StringUtils.isNotBlank(addresskey)){//添加过滤条件,根据地址关键字模糊查询

dc.add(Restrictions.like("addresskey", "%"+addresskey+"%"));

}

Region region=model.getRegion();if(region != null){

String province=region.getProvince();

String city=region.getCity();

String district=region.getDistrict();

dc.createAlias("region", "r");if(StringUtils.isNotBlank(province)){//添加过滤条件,根据省份模糊查询-----多表关联查询,使用别名方式实现//参数一:分区对象中关联的区域对象属性名称//参数二:别名,可以任意

dc.add(Restrictions.like("r.province", "%"+province+"%"));

}if(StringUtils.isNotBlank(city)){//添加过滤条件,根据市模糊查询-----多表关联查询,使用别名方式实现//参数一:分区对象中关联的区域对象属性名称//参数二:别名,可以任意

dc.add(Restrictions.like("r.city", "%"+city+"%"));

}if(StringUtils.isNotBlank(district)){//添加过滤条件,根据区模糊查询-----多表关联查询,使用别名方式实现//参数一:分区对象中关联的区域对象属性名称//参数二:别名,可以任意

dc.add(Restrictions.like("r.district", "%"+district+"%"));

}

}

subareaService.pageQuery(pageBean);this.java2Json(pageBean, new String[]{"currentPage","detachedCriteria","pageSize","decidedzone","subareas"});returnNONE;

}

修改BaseDao中的分页查询方法

08c7fc4dd1aabe49e6b516332de7d9fd.png

3 分区数据导出功能

3.1 页面调整

为页面中导出按钮绑定事件

8d95172272c849d86539d1080b2e89c0.png

3.2 服务端实现

第一步:查询所有的分区数据

第二步:使用POI将数据写到Excel文件中

第三步:使用输出流进行文件下载

/*** 分区数据导出功能

*@throwsIOException*/

public String exportXls() throwsIOException{//第一步:查询所有的分区数据

List list =subareaService.findAll();//第二步:使用POI将数据写到Excel文件中//在内存中创建一个Excel文件

HSSFWorkbook workbook = newHSSFWorkbook();//创建一个标签页

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("位置信息");

headRow.createCell(4).setCellValue("省市区");for(Subarea subarea : list) {

HSSFRow dataRow= sheet.createRow(sheet.getLastRowNum() + 1);

dataRow.createCell(0).setCellValue(subarea.getId());

dataRow.createCell(1).setCellValue(subarea.getStartnum());

dataRow.createCell(2).setCellValue(subarea.getEndnum());

dataRow.createCell(3).setCellValue(subarea.getPosition());

dataRow.createCell(4).setCellValue(subarea.getRegion().getName());

}//第三步:使用输出流进行文件下载(一个流、两个头)

String filename= "分区数据.xls";

String contentType=ServletActionContext.getServletContext().getMimeType(filename);

ServletOutputStream out=ServletActionContext.getResponse().getOutputStream();

ServletActionContext.getResponse().setContentType(contentType);//获取客户端浏览器类型

String agent = ServletActionContext.getRequest().getHeader("User-Agent");

filename=FileUtils.encodeDownloadFilename(filename, agent);

ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename="+filename);

workbook.write(out);returnNONE;

}

4 定区添加

定区是进行物流分配的基本单位,可以将取派员、分区、客户信息进行关联,为自动分单提供数据。

页面:WEB-INF/pages/base/decidedzone.jsp

32bfaceb87cbaa47577a076b81b3cc1f.png

4.1 页面调整

4.1.1 使用combobox展示取派员数据

第一步:修改定区页面中combobox下拉框URL地址

99614f59c4838c520e73267f459d1d88.png

第二步:在StaffAction中提供listajax方法,查询所有未删除的取派员,返回json

/*** 查询所有未删除的取派员,返回json*/

publicString listajax(){

List list =staffService.findListNotDelete();this.java2Json(list, new String[]{"decidedzones"});returnNONE;

}

第三步:在BaseDao中扩展一个通用查询方法

233220855eca5224455315ae4320e94e.png

第四步:在StaffService中扩展方法,查询未删除的取派员

fb87bf61b3c5cdf7d2a66248903dca33.png

8d12bab0ab3075265771207835de33e1.png

4.1.2 使用datagrid展示分区数据

第一步:修改页面中datagrid的URL地址

9dc181ae8ce7b14d4450e92817545630.png

第二步:在SubareaAction中提供listajax方法,查询所有未关联到定区的分区,返回json

a6d300b0465d2f0c8996f7be7c32dcec.png

第三步:在SubareaService中扩展方法,查询未关联到定区的分区

a39bc6c7e8836bce8eca167b015fd94b.png

cbedfddc19e64b85f6cb172bead9a430.png

4.1.3 为保存按钮绑定事件提交表单

c718894b2a299e404bf15fb57ac641ff.png

问题一:提交的表单中存在多个id参数

ff844c8b4181c3fbe1466318f22b3fc9.png

解决方案:将datagrid的filed由id改为subareaid

9e6ba080d8008a45efe9f70e451f0821.png

问题二:提交的表单中subareaid参数的值为null

322265699fe449fd520e8194fef1679e.png

解决方案:在分区类中提供getSubareaid方法

887b4a5684c556d39663279edcaa727a.png

90a8a5f0127698f4d1767ddc047103b4.png

4.2 服务端实现

创建定区的Action、Service、Dao

144faf811cf0c151365e238769987182.png

Service代码:

261735897bf9e96e4a5c2eb4fea7e6c4.png

配置struts.xml

34efd8a9cb13f5c272df93a1ae388495.png

5 定区分页查询

第一步:修改定区jsp页面中datagrid的URL地址

1b8d823e3959ae764304cb5748c2bf6a.png

第二步:在定区Action中提供pageQuery方法

f91b876cebe3e4cd72963d84b0d46bb4.png

第三步:在Decidedzone.hbm.xml中修改,查询定区对象时需要立即加载关联的取派员对象

4700353aab35a4a282614945f4e72f6f.png

6 分页查询死循环问题

1、页面不需要展示关联数据时

解决:将关联对象属性排除掉

2、页面需要展示关联数据时

解决:将关联对象改为立即加载,并且将关联对象中的属性排除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值