n 分区分页查询(没有过滤条件)
页面:WEB-INF/pages/base/subarea.jsp
第一步:修改jsp页面中datagrid的URL地址
第二步:在SuareaAction中提供分页查询方法pageQuery
public String pageQuery(){
subareaService.pageQuery(pageBean);
this.java2Json(pageBean,new String[]{"currentPage","detachedCriteria","pageSize","decidedzone","subareas"});
return NONE;
}
第三步:修改subarea.hbm.xml
n 分区分页查询(带有过滤条件)
第一步:提供一个工具方法,可以将指定的form表单中所有的输入项转为json数据,用于参数提交
// 定义一个工具方法,用于将指定的form表单中所有的输入项转为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(){
// 将指定的form表单中所有的输入项转为json数据
var p = $("#searchForm").serializeJson();
// 调用数据表格的load方法,重新发一次ajax请求,并且提交参数
$("#grid").datagrid("load",p);
// 关闭查询窗口
$("#searchWindow").window("close");
});
第三步:修改Action中分页查询方法
/**
* 分页查询
* @return
*/
public String 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"});
return NONE;
}
第四步:修改BaseDao中的分页查询方法
n 页面调整
// 导出按钮对应的处理函数
function doExport(){
// 发送请求,请求Action,进行文件下载
window.location.href = "subareaAction_exportXLs.action";
}
n 使用POI将数据写到Excel文件
n 通过输出流进行文件下载
/**
* 分区数据导出功能
* @return
*/
public String exportXLs() throws IOException {
// 第一步:查询所有的分区数据
List list = subareaService.findAll();
// 第二步:使用POI将数据写到Excel文件中
// 在内存中创建一个Excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建一个标签页
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);
return NONE;
}
n 定区概念
n 定区添加页面调整
第一步:修改定区页面中combobox下拉框URL地址
n 服务端实现
第二步:在StaffAction中提供listajax方法,查询所有未删除的取派员,返回json
/**
* 查询所有未删除的取派员,返回json
* @return
*/
public String listAjax(){
List list = staffService.findListNotDelete();
this.java2Json(list,new String[]{"decidedzones"});
return NONE;
}
第三步:在BaseDao中扩展一个通用查询方法
@Override
public List findByCriteria(DetachedCriteria detachedCriteria) {
return (List) this.getHibernateTemplate().findByCriteria(detachedCriteria);
}
第四步:在StaffService中扩展方法,查询未删除的取派员
public List findListNotDelete() {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Staff.class);
// 添加过滤条件
detachedCriteria.add(Restrictions.eq("deltag","0"));
//detachedCriteria.add(Restrictions.ne("dettag","1")); // 同上面等价
return staffDao.findByCriteria(detachedCriteria);
}
n 页面调整
第一步:修改页面中datagrid的URL地址
n 服务端实现
第二步:在SubareaAction中提供listajax方法,查询所有未关联到定区的分区,返回json
/**
* 查询所有未关联到定区的分区,返回json
* @return
*/
public String listAjax(){
List list = subareaService.findListNotAssociation();
this.java2Json(list,new String[]{"decidedzone","region"});
return NONE;
}
第三步:在SubareaService中扩展方法,查询未关联到定区的分区
/**
* 查询所有未关联到定区的分区
* @return
*/
public List findListNotAssociation() {
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Subarea.class);
// 添加过滤条件,分区对象中decidedzone属性为null
detachedCriteria.add(Restrictions.isNull("decidedzone"));
return subareaDao.findByCriteria(detachedCriteria);
}
第一步:为保存按钮绑定事件提交表单
问题一:提交的表单存在多个id
解决方案:将datagrid的filed由id改为subareaid
问题二:
提交的表单中subareaid参数的值为null
解决方案:在分区类中提供getSubareaid方法
第二步:服务端实现
创建定区的Action、Service、Dao
/**
* 定区管理
* @author lee [email protected]
* @create 2018-04-21 15:12
**/
@Controller
@Scope
public class DecidedzoneAction extends BaseAction{
@Autowired
private DecidedzoneService decidedzoneService;
// 属性驱动,接收多个分区id
private String[] subareaid;
public String[] getSubareaid() {
return subareaid;
}
public void setSubareaid(String[] subareaid) {
this.subareaid = subareaid;
}
/**
* 添加定区
* @return
*/
public String add(){
decidedzoneService.save(model,subareaid);
return LIST;
}
Service代码
@Service
@Transactional
public class DecidedzoneServiceImpl implements DecidedzoneService{
@Autowired
private DecidedzoneDao decidedzoneDao;
@Autowired
private SubareaDao subareaDao;
/**
* 添加一个定区,同时关联分区
* @param model
* @param subareaid
*/
public void save(Decidedzone model, String[] subareaid) {
decidedzoneDao.save(model);
for(String id : subareaid){
Subarea subarea = subareaDao.findById(id);
subarea.setDecidedzone(model);
}
}
配置struts.xml
/WEB-INF/pages/base/decidedzone.jsp
第一步:修改定区jsp页面中datagrid的URL地址
第二步:在定区Action中提供pageQuery方法
/**
* 分页查询定区
* @return
* @throws IOException
*/
public String pageQuery() throws IOException {
// 调用service分页查询
decidedzoneService.pageQuery(pageBean);
// 转json并响应到页面
this.java2Json(pageBean,new String[]{"currentPage","detachedCriteria","pageSize","subareas","decidedzones"});
return NONE;
}
第三步:在Decidedzone.hbm.xml中修改,查询定区对象时需要立即加载关联的取派员对象
解决:将关联对象属性排除掉