BOS06——带有过滤条件的查询(解决form表单提交时,分页携带过滤条件困难的问题)and连表查询返回数据不标准问题,文件导出,BaseDao扩展一个离线Criteria查询,前端字段名重复问题(不知道对应那个字段了),多张表保存问题

1、带有过滤条件的查询(解决form表单提交时,分页携带过滤条件困难的问题)and连表查询返回数据不标准问题

由于使用的都是ajax请求,页面没刷新,数据(条件的参数)一直存在页面中

 1 //定义一个工具方法,用于将指定的form表单中所有的输入项转为json数据{key:value,key:value}
 2 $.fn.serializeJson=function(){
 3     var serializeObj={};
 4     var array=this.serializeArray();
 5     $(array).each(function(){
 6         if(serializeObj[this.name]){
 7             if($.isArray(serializeObj[this.name])){
 8                 serializeObj[this.name].push(this.value);
 9             }else{
10                 serializeObj[this.name]=[serializeObj[this.name],this.value];
11             }
12         }else{
13             serializeObj[this.name]=this.value;
14         }
15     });
16     return serializeObj;
17 };
18 
19 $("#btn").click(function () {
20     //将指定的form表单中所有的输入项转为json数据{key:value,key:value}
21     var p = $("#searchForm").serializeJson();
22     console.info(p);
23     //调用数据表格的load方法,重新发送一次ajax请求,并且提交参数
24     $("#grid").datagrid("load",p);
25     //关闭查询窗口
26     $("#searchWindow").window("close");
27 });
前端
 1 public String pageQuery() throws Exception {
 2     // 取出离线Criteria对象
 3     DetachedCriteria dc = super.pageBean.getDetachedCriteria();
 4     // 获取region对象
 5     Region region = super.model.getRegion();
 6 
 7     if (super.model!=null){
 8         String province = region.getProvince();
 9         String city = region.getCity();
10         String district = region.getDistrict();
11         // 多表查询***
12         // 为另一张表起别名 ==> select * from subarea s inner join region r on s.region_id = r.id
13         dc.createAlias("region", "r");
14 
15         if(StringUtils.isNotBlank(province)){
16             //添加过滤条件,根据省份模糊查询-----多表关联查询,使用别名方式实现
17             //参数一:分区对象中关联的区域对象属性名称
18             //参数二:别名,可以任意
19             dc.add(Restrictions.like("r.province", "%"+province+"%"));
20         }
21 
22         if(StringUtils.isNotBlank(city)){
23             //添加过滤条件,根据市模糊查询-----多表关联查询,使用别名方式实现
24             //参数一:分区对象中关联的区域对象属性名称
25             //参数二:别名,可以任意
26             dc.add(Restrictions.like("r.city", "%"+city+"%"));
27         }
28 
29         if(StringUtils.isNotBlank(district)){
30             //添加过滤条件,根据区模糊查询-----多表关联查询,使用别名方式实现
31             //参数一:分区对象中关联的区域对象属性名称
32             //参数二:别名,可以任意
33             dc.add(Restrictions.like("r.district", "%"+district+"%"));
34         }
35     }
36 
37 
38     subareaService.pageQuery(super.pageBean);
39 
40     super.writeJson(super.pageBean,new String[]{"currentPage", "detachedCriteria", "pageSize","decidedzone","subareas"});
41 
42     return "none";
43 }
pageQuery方法,记得把super.model==> region
1 // 3.指定封装对象的方式
2 detachedCriteria.setResultTransformer(DetachedCriteria.ROOT_ENTITY);
BaseDao

2、文件导出

 1 /**
 2  * 分区数据导出功能
 3  * @throws IOException
 4  */
 5 public String exportXls() throws IOException {
 6     //第一步:查询所有的分区数据
 7     List<Subarea> list = subareaService.findAll();
 8 
 9     //第二步:使用POI将数据写到Excel文件中
10     //在内存中创建一个Excel文件
11     HSSFWorkbook workbook = new HSSFWorkbook();
12     //创建一个标签页
13     HSSFSheet sheet = workbook.createSheet("分区数据");
14     //创建标题行
15     HSSFRow headRow = sheet.createRow(0);
16     headRow.createCell(0).setCellValue("分区编号");
17     headRow.createCell(1).setCellValue("开始编号");
18     headRow.createCell(2).setCellValue("结束编号");
19     headRow.createCell(3).setCellValue("位置信息");
20     headRow.createCell(4).setCellValue("省市区");
21 
22     for (Subarea subarea : list) {
23         HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
24         dataRow.createCell(0).setCellValue(subarea.getId());
25         dataRow.createCell(1).setCellValue(subarea.getStartnum());
26         dataRow.createCell(2).setCellValue(subarea.getEndnum());
27         dataRow.createCell(3).setCellValue(subarea.getPosition());
28         dataRow.createCell(4).setCellValue(subarea.getRegion().getName());
29     }
30 
31     //第三步:使用输出流进行文件下载(一个流、两个头)
32 
33     String filename = "分区数据.xls";
34     String contentType = ServletActionContext.getServletContext().getMimeType(filename);
35     ServletOutputStream out = ServletActionContext.getResponse().getOutputStream();
36     ServletActionContext.getResponse().setContentType(contentType);
37 
38     //获取客户端浏览器类型
39     String agent = ServletActionContext.getRequest().getHeader("User-Agent");
40     filename = FileUtils.encodeDownloadFilename(filename, agent);
41     ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename="+filename);
42     workbook.write(out);
43     return NONE;
44 }
文件导出
 1 public class FileUtils {
 2     /**
 3      * 下载文件时,针对不同浏览器,进行附件名的编码
 4      *
 5      * @param filename 下载文件名
 6      * @param agent    客户端浏览器
 7      * @return 编码后的下载附件名
 8      * @throws IOException
 9      */
10     public static String encodeDownloadFilename(String filename, String agent)
11             throws IOException {
12         if (agent.contains("Firefox")) { // 火狐浏览器
13             filename = "=?UTF-8?B?"
14                     + new BASE64Encoder().encode(filename.getBytes("utf-8"))
15                     + "?=";
16             filename = filename.replaceAll("\r\n", "");
17         } else { // IE及其他浏览器
18             filename = URLEncoder.encode(filename, "utf-8");
19             filename = filename.replace("+", " ");
20         }
21         return filename;
22     }
23 }
FileUtils

3、BaseDao扩展一个离线Criteria查询

4、前端字段名重复问题(不知道对应那个字段了),多张表保存问题

 1 private String[] subareaid;     // 接受前端传来的subareaid
 2 
 3 public void setSubareaid(String[] subareaid) {
 4     this.subareaid = subareaid;
 5 }
 6 
 7 public String save() throws Exception {
 8 
 9     decidedzoneService.save(super.model, subareaid);
10 
11     return "list";
12 }
DecidedzoneAction
 1 public void save(Decidedzone model, String[] subareaid) {
 2     // 此时保存的是decidedzone表中的数据,另一个表的还没保存
 3     decidedzoneDao.save(model);
 4     // 保存subarea表中的decidedzone_id字段
 5     for (String s : subareaid) {
 6         Subarea subarea = subareaDao.findById(s);
 7         subarea.setDecidedzone(model);  // 关联分区,由于是持久化状态,不用保存
 8     }
 9 
10 }
DecidedzoneService

 

posted @ 2018-03-16 20:38  想54256  阅读(432)  评论(0编辑  收藏  举报